このサイトをTLS1.3に対応しました。もともと対応していたつもりだったのですが、よくよく調べるとできていませんでした。

環境


環境は以下のとおりです。

  • Ubuntu 18.04
  • nginx: 1.16.1
  • openssl: 1.1.1

対応方法


詳しくは下記のサイト様を見ていただくとわかると思いますが、要するに現状(1.16 stable)のnginxでTLS1.3に対応するにはopensslの設定も変更する必要があります。

自分の場合はnginx.confに下記を記述しただけで対応していたつもりになっていましたが、これは誤りでした。

1
ssl_protocols TLSv1.3 TLSv1.2;

ハマったところ


自分の場合はIPアドレスでのアクセスを防ぐために、それぞれのディレクティブ以外にデフォルト向けの設定を行っていました。 この部分も変更する必要がありました。この部分を変更するまでは何度確認しても一向にTLS1.3にならずになかなか手を焼きました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/yoshinorin.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yoshinorin.net/privkey.pem;
+ ssl_protocols TLSv1.3 TLSv1.2;
+ ssl_ciphers 'HIGH !aNULL !eNULL !SSLv2 !SSLv3 !TLSv1';
ssl_prefer_server_ciphers on;

server_name _;
return 444;
}

その他の変更


今回あわせて次の変更も行いました。

nginxのバージョンアップ

勢いで上げてしまいました。1.14.0から1.16.1です。

暗号スイートの変更

この辺りは結構適当に設定していたのですが、今回はある程度、ある程度理解したうえで再設定しました。

1
2
- ssl_ciphers  'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
+ ssl_ciphers 'HIGH !aNULL !eNULL !SSLv2 !SSLv3 !TLSv1';

OCSP Staping

OCSP Stapingの設定を行いました。超絶雑な説明をすると、証明書が有効かどうか検証するのをサーバサイドで行うものです。こちらのサイトがわかりやすいです。

1
2
+ ssl_stapling on;
+ ssl_stapling_verify on;

対応後


対応後には無事にTLS1.3がサポートされていることが確認できました。

おわり。