TLS 1.3 não funciona no nginx 1.21 com openssl 1.1.1n

TLS 1.3 não funciona no nginx 1.21 com openssl 1.1.1n

Tenho o nginx (1.21.6) rodando com openssl 1.1.1n em um servidor Debian 11. Embora eu tenha seguido muitos tutoriais e analisado várias perguntas neste fórum sobre esse tópico, não consigo fazer o TLS 1.3 funcionar. A saída de 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

Atualizei o nginx para a versão principal porque não consegui fazer o TLS 1.3 funcionar também nas versões anteriores. É muito estranho... Openssl definitivamente suporta TLS 1.3. Eu testei através openssl s_client -tls1_3 -connect www.cloudflare.com:443do qual funcionou bem. Aqui está meu ssl.confarquivo nginx que incluí em cada um dos meus servidores nginx (os certificados estão incluídos separadamente nas seções do servidor):

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;

OQualys ssltest dos meus sitesentretanto, não mostra que eu uso o TLS 1.3 no meu servidor. Além disso, o navegador Chrome mostra que se conecta via TLS 1.2. Mesmo se eu remover a TLSv1.2diretiva do meu ssl.confe sair apenas TLSv1.3, ele ainda se conecta via TLS 1.2.

Não existe em nenhum outro lugar uma ssl_protocolsdiretiva em qualquer outro arquivo de configuração do nginx. Eu verifiquei isso através do nginx -T.

Estou realmente ficando sem ideias..... Alguém pode me ajudar?

EDITAR: De alguma forma, o nginx não parece reagir adequadamente ssl_protocolsà ssl_ecdh_curvediretiva. Por exemplo, quando eu excluo o ssl_ciphersda minha configuração (como @drookie sugeriu em seu comentário), o TLS 1.0 e o TLS 1.1 parecem ser suportados pelo meu servidor, embora eu tenha definido ssl_protocols TLSv1.3 TLSv1.2;. Da mesma forma, de acordo comQualys ssltest, secp256r1é suportado, embora eu não tenha essa curva na minha configuração de ssl_ecdh_curve(nor prime256v1). Parece-me que algo substituiu minhas configurações no ssl.confarquivo. Estou usando acme.sh para obter meus certificados. grep -R 'ssl_protocol' /etc/*apenas fornece a linha ssl.confcom ssl_protocols TLSv1.3 TLSv1.2;. Não tenho ideia do que poderia causar a interferência/sobrescrição...

Responder1

Depois de muitos testes e muita leitura, finalmente encontrei uma solução. Tive que escrever a configuração SSL no httpbloco, não nos serverblocos da minha configuração nginx. Isso funcionou, no entanto, apenas se eu copiar as diretivas do meu ssl.confarquivo explicitamente para o httpbloco no meu nginx.conf(caso contrário, nginx -tas saídas

nginx: [emerg] invalid number of arguments in "include" directive in /etc/nginx/nginx.conf:33
nginx: configuration file /etc/nginx/nginx.conf test failed

por algum motivo).

Portanto, meu httpbloco de nginx.confaparência agora é o seguinte:

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/*;
}

Não sei por que essas configurações de SSL precisam ser incluídas/coladas no httpbloco e não em cada serverbloco... Mas funciona e o TLS 1.3 está habilitado!

informação relacionada