Eu tenho o nginx (1.21.6) rodando com openssl 1.1.1n em um servidor Debian 11. Embora eu tenha seguido muitos tutoriais e examinado 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 também não consegui fazer com que o TLS 1.3 funcionasse nas versões anteriores. É muito estranho... Openssl definitivamente suporta TLS 1.3. Eu testei através do openssl s_client -tls1_3 -connect www.cloudflare.com:443
qual funcionou bem. Aqui meu ssl.conf
arquivo de 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;
No entanto, o Qualys ssltest dos meus sites não mostra que eu uso o TLS 1.3 no meu servidor. Além disso, o navegador Chrome mostra que ele se conecta via TLS 1.2. Mesmo se eu remover a TLSv1.2
diretiva de my ssl.conf
e deixar only TLSv1.3
, ela ainda se conecta via TLS 1.2.
Não há mais nenhuma ssl_protocols
diretiva em nenhum outro arquivo de configuração do nginx. Eu verifiquei isso através do nginx -T
.
Estou realmente ficando sem idéias..... Alguém pode me ajudar?
EDIT:
De alguma forma, o nginx não parece reagir na diretiva ssl_protocols
e na ssl_ecdh_curve
diretiva corretamente. 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 defina ssl_protocols TLSv1.3 TLSv1.2;
. Da mesma forma, de acordo com Qualys ssltest , secp256r1
é suportado, embora eu não tenha essa curva na minha configuração de ssl_ecdh_curve
(nem prime256v1
). Parece-me que algo substitui 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;
. Eu não tenho idéia do que poderia causar a interferência / substituição ...
Depois de muitos testes e muita leitura, finalmente encontrei uma solução. Eu tive que escrever a configuração ssl no
http
bloco, não nosserver
blocos da minha configuração nginx. Isso funcionou, no entanto, apenas se eu copiar as diretivas do meussl.conf
arquivo explicitamente para ohttp
bloco no meunginx.conf
(caso contrário,nginx -t
gerapor algum motivo).
Daí, meu
http
bloco denginx.conf
looks agora da seguinte forma:Não sei por que essas configurações SSL precisam ser incluídas/coladas no
http
bloco e não em cadaserver
bloco..... Mas funciona e o TLS 1.3 está ativado!