今回はさくらVPSでテンプレートOS(CentOS 7.4)のnginxに
http/2とhttps通信の設定を施します。
設定が本当に完了したのか、確認をする手順まで書いてます。
nginx.confの設定をhttp/2対応にする
早速nginxの設定を変更していこうと思います。
デフォルトだとhttpで動作するようになっていると思いますが
以下のように変更していきましょう。
1 2 3 4 5 6 7 8 9 10 |
server { listen 80; server_name www.serverbuild.net; return 301 https://www.serverbuild.net$request_uri; } server { listen 443 ssl http2; server_name www.serverbuild.net; root /var/www; index index.php; |
httpで来たリクエストにはhttps://~で始まるURLにリダイレクトする処理を書いてます。
こうすることで、強制的にHTTPS通信に切り替えられます。
また、listenの項目でhttp2を指定することにより、
サーバ再起動後にhttp/2が有効になります。
よりセキュアにするための設定
上記設定ではまだ中途半端な状態です。
特に、listenでHTTPSの設定を入れていますが、
証明書の設定やその他の最適化設定が入ってません。
ここからはよりセキュアなサーバとするための設定を解説します。
HTTPS化全体概要
HTTPSで通信させるには、ご存知かと思いますが証明書を取得し
適切に設定する必要があります。
手順としては、
・証明書取得
・取得した証明書のパスをnginxの設定ファイルに記述
・nginx再起動
・動作確認
このようになります。
証明書取得
ということで、まずは証明書を取得していきましょう。
ネットで調べるとLet’s Encrypt?なる無料のサービスがありますが、
私はオススメしません。
理由は、3ヶ月に1回証明書の更新を行わなければならないためです。
定期的に証明書の有効期限を気にしないといけないのは精神衛生的に?よろしく無い気がします。
なので、可能であればできる限り安いところで証明書取得しちゃいましょう!
私が自宅サーバ用に使っている証明書はネットオウルのものです。
ネットオウル
ちなみに、無料証明書は利用しないと言ってますが、
このサイトを公開しているサーバがX-SERVERなので
管理画面から簡単に証明書を発行できました(Let’s Encrypt w)
自前でサーバのセットアップをし、証明書も適用するという場合には無料版をオススメしないだけなので
レンサバとか使われている方は気にしなくてもいいですね。
証明書をconfig内で指定する
さて、どうにか証明書を取得できましたら、
以下のような設定をすることで、httpsに対応したサーバとすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server { listen 443 ssl http2; server_name www.serverbuild.net; root /var/www; index index.php; ssl_certificate /opt/certificate.pem; ssl_certificate_key /opt/server.key; ssl_dhparam /opt/dhparam.pem; ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_trusted_certificate /opt/int.pem; add_header Strict-Transport-Security "max-age=15768000; includeSubdomains"; |
ssl_certificate / ssl_certificate_key
ssl_certificateについては結合した証明書を指定してください。
ちなみに、nginxはサーバ証明書と中間証明書を結合する必要があります。
以下のコマンドで結合しておきましょう。
1 |
# cat server.pem int.pem ca.pem >> certificate.pem |
server.pemがサーバ証明書、int.pemが中間証明書、ca.pemは必要に応じてCA証明書を指定します。
ちなみにネットオウルではca.pemが必要ありません。
中間証明書の中にCA証明書も含まれていますので。。。
ということで、上記のコマンドから生成されたcertificate.pemをssl_certificateに指定します。
ssl_certificate_keyはサーバの秘密鍵です。
サーバ証明書ではないので、ご注意ください。
ssl_dhparam
ssl_dhparamについては、Diffie_Helmanの鍵交換アルゴリズムに関する設定となります。
以下のコマンドを叩いておきましょう。
1 |
# openssl dhparam -out /opt/dhparam.pem 2048 |
その他ssl_となっている設定項目については特に解説しませんが、
あったらいいと思われるものを設定しているかんじです。
add_header
この項目についてはHSTSというものを使う設定で、
サーバ側がTLS通信を強制するための設定となります。
Googlebotが巡回するときに、最初からTLS通信を行うようになるみたいなので、
リソースを無駄に使わずに済むようです。
以上の設定でnginxのhttp/2,https化が完了しました。
ようやく安心してWebアプリ開発ができるようになりましたねw
ひとまず安心です。
SSL設定が安全な状態に最適化されているか確認
検索キーワード:ssllab
上記のように検索をしてみると一番最初に「Qualys SSL Labs」というサイトが出てきます。
早速アクセスしてみましょう。
トップページが表示されたら、写真の赤枠部分「Test your server >>」をクリックします。
ページが移動したら、「Hostname:」の部分に自サイトのFQDNを入力します。
当サイトもチェックしてみます。
しばらく待ちます。。。
結果は「A-」でした。
A以上あればとりあえず問題ないので、問題がある部分については調べて直してみてくださいね。
HTTP/2(SPDY)の確認をする方法
HTTP/2の確認を行うには、Google Chromeを利用する必要があります。
Chromeを使っていない方はインストールから実施してくださいね。
Chromeを立ち上げたら以下のように検索します。
検索キーワード:google extension http2
検索結果の一番上に出てくるリンクをクリックして、
次のページから拡張機能を追加します。
※私はすでにインストール済みのため、ボタンが違います。
完了したら、右上の閉じるボタンの下あたりに稲妻マークのアイコンが追加されます。
当サイトは以下のように表示されます。
ちなみに、先ほど確認していた「SSL Lab」のサイトでは、
以下のようになりました。
以上、設定および設定確認の方法を紹介しました。
関連記事
CentOS 7 firewalldを無効化する手順
さくらVPSのCentOS 7.4にhttp/2対応nginxを構築した話