nginx サーバの SSL 安全性評価で A+ を獲得
前回の続きです。
前回は、SSL証明書を間違えて設定していた問題を解決した話でした。
今回は、さらにSSLの安全性評価を A+ にすることが目標です。
参考サイト
SSLの安全性評価を A+ にする方法については、すでに沢山の方がブログなどで発信されていますので、まずは、今回参考にしたサイトを以下にご紹介しておきます。
SSLの安全性評価を A+ にするためのバイブルのようなサイトが次のサイトです。
juliansimioni.com上記サイトは、日本語にも翻訳されています。翻訳版は以下より閲覧できます。
NginxでHTTPS : ゼロから始めてSSLの評価をA+にするまで Part 1 | POSTD続いて、次のサイトも参考になります。
NginxでSSLの評価をA+にする手順 - 9mのパソコン日記また、特にSSLプロトコルの話や、Chipers と呼ばれる暗号化アルゴリズム指定方式についてものすごくまとまっているサイトが次のサイトです。
httpsだからというだけで安全?調べたら怖くなってきたSSLの話!? - Qiita
設定前の評価
設定前の安全性評価は「B」でした。
特に「Key Exchange」の数値が低く対策が必要な感じです。
設定内容
冒頭でご紹介したサイトを参考にしながら、自分のサイトを A+ にした設定内容を示します。
1) ssl_protocols の設定
nginx の "ssl protocols" で、"sslv3" など脆弱なプロトコルを無効にします。*1
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
2) ssl_ciphers の設定
以下の値で設定します。こちらは httpsだからというだけで安全?調べたら怖くなってきたSSLの話!? - Qiita を参考にしています。
ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS; ssl_prefer_server_ciphers on;
3) ssl_dhparam 設定
DH交換鍵の設定。この鍵は、次のOpenSSLコマンドで生成します。生成に結構時間を要します。
$ openssl dhparam 2048 -out dhparam.pem
これを ssl_dhparam に設定します。
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
4) HSTS ヘッダ
このヘッダ情報は、非暗号化の http 通信を抑制するために設定します。このヘッダで 必ず SSL での接続するようにクライアントに指示します。
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
設定後の評価
ここまで設定した結果、安全性評価は無事に「A+」となりました。
なんだかすっきりしました。
SSLって以外に奥が深いですね。一度基礎からきちんと勉強しておく価値がありそうです。