2020-12-12に更新

nginx + certbot + Let's Encrypt で TLSv1.0やTLSv1.1が無効化できない時

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 の項目で怒られる。

よければこんな感じ。

Testの結果

やること

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の設定もちゃんとしておくにこしたことはないね。

参考

ありがとうございました!

Originally published at hack-le.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

tama

IoT関係で技術者としてお仕事しています。 趣味のブログは9年目に突入しました。 16性格診断はINFP-T。どんな心理テストでも高い内向性を叩き出せます。 友人とWebサービス開発してます。https://qnqtree.com

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント