TLS 1.3 не работает на nginx 1.21 с openssl 1.1.1n

TLS 1.3 не работает на nginx 1.21 с openssl 1.1.1n

У меня запущен nginx (1.21.6) с openssl 1.1.1n на сервере Debian 11. Хотя я следовал многим руководствам и просмотрел множество вопросов на этом форуме по этой теме, я не могу заставить работать 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;

TheQualys ssltest моих сайтовОднако не показывает, что я использую TLS 1.3 на своем сервере. Кроме того, браузер Chrome показывает, что он подключается через TLS 1.2. Даже если я удаляю директиву TLSv1.2из своего ssl.confи оставляю только TLSv1.3, он все равно подключается через TLS 1.2.

ssl_protocolsНигде больше в других файлах конфигурации nginx нет такой директивы. Я проверил это через nginx -T.

У меня действительно заканчиваются идеи... Может ли кто-нибудь мне помочь?

РЕДАКТИРОВАТЬ: Почему-то nginx, похоже, не реагирует на ssl_protocolsи ssl_ecdh_curveдирективу должным образом. Например, когда я удаляю ssl_ciphersиз своей конфигурации (как @drookie предложил в своем комментарии), TLS 1.0 и TLS 1.1, похоже, поддерживаются моим сервером, хотя я установил ssl_protocols TLSv1.3 TLSv1.2;. Аналогично, согласноQualys ssltest, secp256r1поддерживается, хотя у меня нет этой кривой в моей конфигурации ssl_ecdh_curve(ни prime256v1). Мне кажется, что что-то перезаписывает мои настройки в ssl.confфайле. Я использую acme.sh для получения сертификатов. grep -R 'ssl_protocol' /etc/*выдает только строку ssl.confс ssl_protocols TLSv1.3 TLSv1.2;. Я понятия не имею, что может вызвать помехи/перезапись...

решение1

После многих дальнейших тестов и многого чтения я, наконец, нашел решение. Мне пришлось написать конфигурацию 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/*;
}

Я не знаю, почему эти настройки SSL должны быть включены/вставлены в httpблок, а не в каждый serverблок... Но это работает, и TLS 1.3 включен!

Связанный контент