nginx SSLを設定
前回(早くHTTPSになりたい)HTTPSに対応した際には最低限の設定のみを行った。
それをさらにいい感じにする。
Qualysという会社の運営するSSL Labs というサイトで、サーバのセキュリティパワーを計測してくれる。
最初はこんな感じ↓
これによりSSLの変化を数値化する。
1. 対応プロトコルの設定
SSL Labs曰くTLS 1.0 と TLS 1.1の対応をやめろとのことなのでやめる。
vi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
HTTPS部分の設定を変える。
1 | server{ |
ここに
1 | ssl_protocols TLSv1.2: |
を追加。
その結果、
総合結果はBのままだが「Protocol Support」のスコアが上がった。
2. 鍵交換アルゴリズムのパラメータ設定
SSLではDH(Diffie-Hellman)鍵交換というアルゴリズムを使用する。
それに使用する鍵がデフォルトだと1024bitで短いため、以下のコマンドで2048bitのものを生成する。
1 | openssl dhparam -out /etc/nginx/dhparam.pem 2048 |
少し時間がかかる。
またvi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
でさっきのserver{}
に以下を追加
1 | ssl_dhparam /etc/nginx/dhparam.pem; |
DH鍵交換に使用する鍵がさっき生成した2048bitのものになった。
3. ssl_prefer_server_ciphers を有効にする
ssl_prefer_server_ciphers
をon
にする。
デフォルトはoff
になっていて、この状態では利用する暗号スイート(暗号の組み合わせ)をクライアント側が決定する。
セキュリティ的にはサーバ側で決めたいのでon
にする。
同様にvi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
でさっきのserver{}
に以下を追加
1 | ssl_prefer_server_ciphers on; |
その結果、
「Key Exchange」のスコアが上がり、この時点でA評価となった。
4. OCSP Stapling
サーバ接続時に証明書が失効されていないか確認する必要があり、OCSP(Online Certificate Status Protocol)という方式が使われる。
証明書の中にCAのUPLが記述されており、クライアントが問い合わせるというもの。
OCSP Staplingというパワーアップ版は、サーバが事前に問い合わせて結果と証明書を一緒に渡す。
これにより通信量が抑えられる。
同様にvi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
でさっきのserver{}
に以下を追加
1 | ssl_stapling on; |
/etc/letsencrypt/live/ドメイン名/chain.pem
は、
前回(早くHTTPSになりたい)certbot
が作成してくれたファイル。
5. HSTSでHTTPS通信を強制する
前回(早くHTTPSになりたい)HTTPでアクセスされた場合にHTTPSにリダイレクトするようにしたが、リダイレクトするまではHTTPで通信されてしまう。
HSTS(HTTP Strict Transport Security)というものを設定すると、クライアントは次回以降のアクセスを指定期間内HTTPSで行うようになる。
同様にvi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
でさっきのserver{}
に以下を追加
1 | add_header Strict-Transport-Security max-age=15768000; |
max-age=15768000
は指定期間(秒)。
15768000秒 = 182.5日 = 半年
その結果、
A+評価となった。
参考