
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:443
do qual funcionou bem. Aqui está meu ssl.conf
arquivo 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.2
diretiva do meu ssl.conf
e sair apenas TLSv1.3
, ele ainda se conecta via TLS 1.2.
Não existe em nenhum outro lugar uma ssl_protocols
diretiva 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_curve
diretiva. Por exemplo, quando eu excluo o ssl_ciphers
da 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.conf
arquivo. Estou usando acme.sh para obter meus certificados.
grep -R 'ssl_protocol' /etc/*
apenas fornece a linha ssl.conf
com 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 http
bloco, não nos server
blocos da minha configuração nginx. Isso funcionou, no entanto, apenas se eu copiar as diretivas do meu ssl.conf
arquivo explicitamente para o http
bloco no meu nginx.conf
(caso contrário, nginx -t
as 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 http
bloco de nginx.conf
aparê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 http
bloco e não em cada server
bloco... Mas funciona e o TLS 1.3 está habilitado!