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
我將 nginx 升級到主線版本,因為我也無法讓 TLS 1.3 在以前的版本中工作。很奇怪……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 ssltest並沒有顯示我在我的伺服器上使用 TLS 1.3。此外,Chrome 瀏覽器顯示它通過 TLS 1.2 連接。即使我
TLSv1.2
從 my 中刪除指令ssl.conf
並僅離開TLSv1.3
,它仍然通過 TLS 1.2 連接。nginx 的任何其他配置文件中都沒有其他
ssl_protocols
指令。我通過nginx -T
.我真的沒有想法了…..有人可以幫助我嗎?
編輯: 不知何故,nginx 似乎沒有正確地對
ssl_protocols
andssl_ecdh_curve
指令做出反應。例如,當我ssl_ciphers
從我的配置中刪除 (正如@drookie 在他的評論中建議的那樣)時,我的伺服器似乎支持 TLS 1.0 和 TLS 1.1,儘管我設置了ssl_protocols TLSv1.3 TLSv1.2;
. 同樣,根據Qualys ssltest,secp256r1
雖然我的ssl_ecdh_curve
(norprime256v1
) 配置中沒有這條曲線,但它是受支持的。在我看來,好像有什麼東西覆蓋了我在ssl.conf
文件中的設置。我正在使用 acme.sh 來獲取我的證書。grep -R 'ssl_protocol' /etc/*
只ssl.conf
用ssl_protocols TLSv1.3 TLSv1.2;
. 我不知道什麼會導致干擾/覆蓋……
經過多次進一步的測試和閱讀,我終於找到了解決方案。我必須在塊中編寫 ssl 配置
http
,而不是在server
我的 nginx 配置塊中。但是,只有當我將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
塊中而不是在每個server
塊中包含/粘貼這些 ssl 設置…..但是它可以工作並且啟用了 TLS 1.3!