nginx と openssl-1.1.1 で TLS 1.3 の暗号スイートを "ムリヤリ" 設定する
2020/02/04 追記
こんなことしなくても openssl.cnf でデフォルト設定できるんですね。知らなかった…。
経緯
openssl 1.1.1 で TLS 1.3 がサポートされましたね。
nginx でも使えますが、実はまだ完全ではありません。
ssl_ciphers
を設定しても、TLS 1.3 の暗号スイートは、指定した順序にはならず、デフォルトの下記の順になってしまいます。
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
これは openssl で、TLS 1.3 の暗号スイートの設定インタフェースが、TLS 1.2 以前のものとは別になっているからです。
コマンドラインでも別になっていますね。
$ openssl ciphers -help
Usage: ciphers [options]
Valid options are:
-help Display this summary
-v Verbose listing of the SSL/TLS ciphers
-V Even more verbose
-s Only supported ciphers
-tls1 TLS1 mode
-tls1_1 TLS1.1 mode
-tls1_2 TLS1.2 mode
-tls1_3 TLS1.3 mode
-stdname Show standard cipher names
-psk include ciphersuites requiring PSK
-srp include ciphersuites requiring SRP
-convert val Convert standard name into OpenSSL name
-ciphersuites val Configure the TLSv1.3 ciphersuites to use <== コレ
TLS 1.3 の暗号スイートは安全なものばかりなので良いんですが、AES256 が選択されてしまうのはちょっとオーバースペックです。
というわけで、対応されるまでの間は、ムリヤリ頑張って見る事にしました。
- バージョンメモ
- nginx 1.15.7
- openssl 1.1.1a
openssl にパッチを当てる
ssl_ciphers
で設定できないので、ムリヤリ感が強いですが openssl にパッチを当て、デフォルトの暗号スイートを変更してしまいます。
あとは、通常と同じようにビルドします。
$ ./configure \
...snip...
--with-openssl=/path/to/openssl-1.1.1a \
--with-openssl-opt='-fPIC'
$ make -j$(nproc)
$ sudo make install
結果
SSL Server Test で見ても、ちゃんと望む順序になっています!
うーん、美しい…!