当ブログの SSL/TLS 設定を変えたのでメモ。
内容的にはよくあるやつ。
変更前。
変更後。
まずは状況確認から。
皆さんおなじみ SSL Server Test (https://www.ssllabs.com/ssltest/)
最初は適当に作ったコンフィグだったので、もっと悪いかと思ってたけど B だからそんなひどくもないっぽい。
Let’s encrypt が偉大過ぎた(;・∀・)
せっかくなのでもう少しだけ強化しとこうということで、設定いじいじ。
前提として、当ブログはリバースプロキシで HTTPS 終端を行い、wordpress まで HTTP でつないでいるため、リバースプロキシにしている Nginx で設定を行います。
TLS1.3 はまだ出たばっかりでややこしそうだったので、1.2 までで頑張る。
ググりながら見ていくと
1) ssl_protocols の設定
2) ssl_ciphers の設定
3) ssh_dhparam の設定
4) HSTS ヘッダの設定
が大事らしい。
1) ssl_protocols の設定
プロトコルを指定して、古いプロトコルを除外する設定。デフォルトで問題ないらしい。
2) ssl_ciphers の設定
cipher は利用するアルゴリズムの組み合わせのこと。
ssl_prefer_server_ciphers on;
次にアルゴリズムを指定するんだけど、拾ってきたものをそのまま貼ったら全然ダメだったぽくて逆に下がった…orz
調べたんだけど、正直どれが優秀な組み合わせかなんてわからない。
そんなときに Mozilla さんに出会いました!
https://ssl-config.mozilla.org/
ここで作れるコンフィグの ciphers をそのままコピー。
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
3) ssh_dhparam の設定
DH 鍵交換の設定。まずは鍵の生成が必要らしい。
ディレクトリもなかったので適当に作成。
$ openssl dhparam 2048 -out /etc/nginx/ssl/dhparam_2048.pem
config には次の設定を記載。
ssl_dhparam /etc/nginx/ssl/dhparam_2048.pem;
4) HSTS ヘッダの設定
HTTPS で通信するようクライアントに伝える設定。どっかから拾ってきたやつに元から入ってた。
add_header Strict-Transport-Security max-age=15768000;
以上。
最終的にはこんな感じになった。nginx.conf に書くほうがいいものもあるけど、いったんこれで。
server { listen 80; listen [::]:80; server_name www.naokilog.com; return 301 https://$host$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name www.naokilog.com; # 証明書チェーン ssl_certificate <証明書の PATH>/fullchain.pem; # 自身の証明書を除いた証明書チェーン (OCSP 対応用) ssl_trusted_certificate <証明書の PAHT>/chain.pem; # 秘密鍵 ssl_certificate_key <秘密鍵の PATH>.privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_dhparam /etc/nginx/ssl/dhparam_2048.pem; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; # HSTS ヘッダ add_header Strict-Transport-Security max-age=15768000; # OCSP 対応 ssl_stapling on; ssl_stapling_verify on; resolver 1.1.1.1 8.8.4.4; # proxy config proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_hide_header X-Powered-By; location / { proxy_pass http://<転送先IPアドレス>/; proxy_redirect http:// https://; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
コメント