TLSv1.0/1.1の無効化に備えてnginxの設定を見直しました。

2020年1月以降、各種ブラウザがTLSv1.0/1.1のサポートを切り始めます。サーバー側も、通常使われないからといって脆弱性のある古いバージョンを使える状態で放置しておくのは良くないので対処しました。ついでにこれまでなあなあで設定していたnginxのSSL関連の設定も見直しました。

今の構成

sayakachan.netのDNSレコードは、少し変で、以下の画像のようになっています。

ブログはGitHub Pagesで管理しているのでそちらへ向けて、それ以外は自分のサーバーへ。また、ブログと一部の静的ページはプロキシが間にいます。キャッシュにもあてています。ブログと一部の静的ページはcloudflareの証明書が使われ、それ以外は自分で取ったLet’s Encryptの証明書が使われています。図にすると以下の感じでしょうか。なお分かりづらいかもしれません。

TLSの設定について自分で制御しているは図で言うところのnginxのhttpsの部分です。ここの設定を見直しました。

SSL/TLSについて

以下サイトで色々知りました。

現状

*.sayakachan.netSSL Labsにかけてみた結果です。

現状ではnginxのSSL関連の設定は以下のようになっていました。

listen 443;
server_name hogefuga.sayakachan.net;

ssl on;
ssl_certificate /etc/letsencrypt/live/sayakachan.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sayakachan.net/privkey.pem;

nginxのバージョンは1.10.3でopensslのバージョンは1.1.0です。このバージョンのnginxのデフォルトだと、TLSv1.0/1.1/1.2を有効にします。

対処

SSL Configuration Generatorを参考に進めて以下のように変更しました。

listen 443 ssl;
server_name hogefuga.sayakachan.net;

ssl_certificate /etc/letsencrypt/live/sayakachan.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sayakachan.net/privkey.pem;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1.2;
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;
ssl_prefer_server_ciphers off;

dhparam.pemはSSL Configuration Generatorで紹介されているのを参考に、以下のようにして作りました。

curl -sS https://ssl-config.mozilla.org/ffdhe2048.txt | sudo tee /etc/nginx/dhparam.pem

結果

目立った警告が消えたのでとりあえずヨシとします👏