
Debian 11 サーバーで openssl 1.1.1n を使って nginx (1.21.6) を実行しています。多くのチュートリアルに従い、このフォーラムでこのトピックに関する複数の質問を確認しましたが、TLS 1.3 を動作させることができません。出力は次のようになりますnginx -V
:
nginx version: nginx/1.21.6
built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
built with OpenSSL 1.1.1k 25 Mar 2021 (running with OpenSSL 1.1.1n 15 Mar 2022)
TLS SNI support enable
以前のバージョンでも TLS 1.3 が動作しなかったため、nginx をメインライン バージョンにアップグレードしました。とても奇妙です... Openssl は間違いなく TLS 1.3 をサポートしています。私はそれをテストしましたが、openssl s_client -tls1_3 -connect www.cloudflare.com:443
うまく動作しました。以下は、ssl.conf
各 nginx サーバーに含めた nginx のファイルです (証明書はサーバー セクションに個別に含まれています)。
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_stapling on;
#ssl_trusted_certificate /pfad/bundle.ca.pem;
ssl_stapling_verify on;
ssl_dhparam /etc/nginx/dhparams.pem;
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256: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 on;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=31536000;preload;includeSubDomains" always;
の私のサイトの Qualys SSL テストただし、サーバーで TLS 1.3 を使用していることは表示されません。また、Chrome ブラウザでは TLS 1.2 経由で接続していることが示されています。TLSv1.2
からディレクティブを削除してssl.conf
のみを残してもTLSv1.3
、TLS 1.2 経由で接続し続けます。
ssl_protocols
nginx の他の構成ファイルには、ディレクティブはどこにもありません。 で確認しましたnginx -T
。
本当にアイデアが尽きてしまいました.....誰か助けてくれませんか?
編集:ssl_protocols
どういうわけか、nginx はと のディレクティブ に適切に反応しないようですssl_ecdh_curve
。たとえば、 を設定から削除するとssl_ciphers
(@drookie がコメントで示唆したように)、 を設定しても TLS 1.0 と TLS 1.1 がサーバーでサポートされているようですssl_protocols TLSv1.3 TLSv1.2;
。同様に、Qualys SSLテストはサポートされていますが、私の(または)secp256r1
の構成にはこの曲線がありません。ファイル内の設定が何かによって上書きされているように思えます。証明書を取得するために acme.sh を使用しています。 では の行のみが提供されます。何が干渉/上書きの原因になるのかわかりません...ssl_ecdh_curve
prime256v1
ssl.conf
grep -R 'ssl_protocol' /etc/*
ssl.conf
ssl_protocols TLSv1.3 TLSv1.2;
答え1
さらに何度もテストし、たくさん読んだ後、ついに解決策を見つけました。SSL設定をnginx設定のhttp
ブロックではなく、ブロックに記述する必要がありました。ただし、これは、ファイルからディレクティブを明示的にブロックにserver
コピーした場合にのみ機能しました(そうでない場合は出力されます)。ssl.conf
http
nginx.conf
nginx -t
nginx: [emerg] invalid number of arguments in "include" directive in /etc/nginx/nginx.conf:33
nginx: configuration file /etc/nginx/nginx.conf test failed
何らかの理由で)。
したがって、私のhttp
ブロックはnginx.conf
次のようになります。
http {
...
ssl_dhparam /etc/nginx/dhparams.pem;
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
...
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
http
これらの SSL 設定を各ブロックではなくブロックに含めたり貼り付けたりする必要がある理由がわかりませんserver
... ただし、動作し、TLS 1.3 が有効になっています。