TLS 1.3 は openssl 1.1.1n の nginx 1.21 では動作しません

TLS 1.3 は openssl 1.1.1n の nginx 1.21 では動作しません

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_protocolsnginx の他の構成ファイルには、ディレクティブはどこにもありません。 で確認しました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_curveprime256v1ssl.confgrep -R 'ssl_protocol' /etc/*ssl.confssl_protocols TLSv1.3 TLSv1.2;

答え1

さらに何度もテストし、たくさん読んだ後、ついに解決策を見つけました。SSL設定をnginx設定のhttpブロックではなく、ブロックに記述する必要がありました。ただし、これは、ファイルからディレクティブを明示的にブロックにserverコピーした場合にのみ機能しました(そうでない場合は出力されます)。ssl.confhttpnginx.confnginx -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 が有効になっています。

関連情報