TLSv1.0やTLSv1.1は既知の脆弱性があるために、各種ブラウザでも対応が打ち切られています(参考「ついにTLS 1.0/1.1の無効化が決定!影響や確認・対応方法とは? | さくらのSSL」)。なので、もうサーバー側で対応する理由はないわけで、無効化する必要があるのですが、nginxの設定をなんぼいじっても無効化できないと思ったら、certbotでLet's Encrypt使っている場合そっちの対応もあって半日ハマっていました。
環境
- AWS EC2
- Ubuntu 18.04
- nginx 1.18.0
- certbot 0.31.0
- Let's Encrypt によるドメイン証明
やりたいこと
TLSv1.0とTLSv1.1が使えるせいで、ssllabs.com のテストでB評価と言われる。実際、ほとんどのブラウザで無効化されるし、もはやサポートする理由がないので切りたい。
確認の仕方
作業に入る前に、先に確認の仕方を見ておく。
opensslコマンド
簡易的に見るならば、以下のコマンドを実行するとよい。
# TLS1.1
openssl s_client -connect example.com:443 -no_tls1_2
# TLS1.2
openssl s_client -connect example.com:443 -no_tls1_2
それぞれ実行するとずらずら表示される。対応していなければ SSL handshake has read 7 bytes and written 0 bytes というようなバイト表示がされる。ので、-no_tls1_2オプションをつけた時にそうなればよい。
ssllabs.comでテスト受ける
時間がかかるので最初と最後だけ受ければいいと思うが、SSL Server Test (Powered by Qualys SSL Labs) でテストを受けて確認する。TLSv1.0、v1.1をサポートしていると、Protocol Support の項目で怒られる。
よければこんな感じ。

やること
nginxの設定ファイルと、certbotでLet's Encrypt使っている場合はそちらのファイルも見る。むしろそっちだけでもいい。
nginx.confの設定変更
nginxの設定ファイルの基本については過去記事「nginxの設定ファイル nginx.conf の読み方 超入門 – 或る阿呆の記」を参照。
httpディレクティブ内にある、ssl_protocolsの項目を以下のように記述する。
ssl_protocols TLSv1.2;
もしかしたらserverディレクティブに記述しているかもしれないが、その場合は /etc/nginx/sites-available/* の設定ファイルの記述を確認する。
TLSv1.3も対応しているならそれも書いておく。ただしTLSv1.3対応については本記事ではスコープ外。
そして文法チェックしてOKだったら再起動。
sudo nginx -t
sudo systemctl restart nginx.service
で、だいたいどこのサイトもこれでOK!とあるのだが、実際にやってみると相変わらずTLSv1.0とTLSv1.1が一向に無効化されなかった。他の設定も色々試したが駄目。
certbot + Let's Encryptの場合
結局たどり着いたのはここ「How to remove TLSv1.0 / 1.1 and enable TLS 1.3 in Nginx – libre-software.net」で、certbot + Let's Encryptで証明書発行している場合は、こちらの設定があるのだという。
具体的には、/etc/letsencrypt/options-ssl-nginx.conf について、ssl_protocolsを確認する。TLSv1.1とかの記述があったらそれが原因なので、removeしておく。
ssl_protocols TLSv1.2;
これでnginxを再起動して、確認したらいけるはず。
むしろこちらの設定だけで、nginxの設定はしなくてもよかった。このサイトのサーバーがそうで、nginxの設定ファイル見たらTLSv1.0、TLSv1.1切ってないのに実際には使えなくて、変だなーと思っていたら、こっちの設定で切っていたという。
まぁでも、nginxの設定もちゃんとしておくにこしたことはないね。
参考
ありがとうございました!
- How to remove TLSv1.0 / 1.1 and enable TLS 1.3 in Nginx – libre-software.net
- ここのおかげ
- Disable TLS 1.0 in NGINX - Server Fault
- それらしい議論がされているのだが、結局関係があったのかなかったのかよくわからずじまい
- 日本語に自動翻訳しただけのゴミサイトが引っかかるのほんとどうにかしてほしい
- それらしい議論がされているのだが、結局関係があったのかなかったのかよくわからずじまい
- nginxの設定で暗号化通信をTLS1.2のみ許可する - Qiita
- コマンド参考にしました
コメント