A configuração SSL/TLS mudou significativamente. Este e o estado atual das melhores praticas para 2026 — o que habilitar, o que desabilitar e o que esta por vir.
Versões de protocolo
| Protocolo | Status | Acao |
|---|---|---|
| SSL 2.0, 3.0 | Quebrado | Desabilitar — vulnerabilidades criticas (POODLE, DROWN) |
| TLS 1.0 | Descontinuado (2021) | Desabilitar — vulnerabilidade BEAST |
| TLS 1.1 | Descontinuado (2021) | Desabilitar — sem suporte a ciphers modernos |
| TLS 1.2 | Seguro | Habilitar — apenas com ciphers AEAD |
| TLS 1.3 | Padrão atual | Habilitar — mais rápido, mais seguro |
Nginx: ssl_protocols TLSv1.2 TLSv1.3;
Apache: SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Cipher suites
TLS 1.3 (nenhuma configuração necessária)
Todas as 5 cipher suites sao seguras. Não tente personalizar — você não pode melhorar.
TLS 1.2 (restringir apenas a AEAD)
# Nginx
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
Regras:
- Apenas suites
ECDHE-*— garante forward secrecy - Apenas
*-GCM-*ou*-CHACHA20-*— apenas ciphers AEAD - Sem ciphers CBC — vulneravel a BEAST, Lucky13
ssl_prefer_server_ciphers off— deixe o cliente escolher (clientes modernos escolhem a melhor opcao)
Gerenciamento de certificados
| Prática | Por que |
|---|---|
| Use chaves ECDSA P-256 | Menores, mais rapidas que RSA 2048 |
| Automatize a renovação | Validade de 47 dias até 2029 torna a renovação manual impraticavel |
Sirva fullchain.pem | Previne erros na cadeia de confiança |
| Monitore a validade do certificado | Configure alertas para o dia 60 de 90 |
| Use monitoramento de Certificate Transparency | Detecte certificados não autorizados |
| Rotacione chaves na renovação | Não reutilize chaves privadas entre certificados |
Headers de segurança
# HSTS — sempre use HTTPS (comece com max-age curto, aumente depois)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
# Prevenir MIME-type sniffing
add_header X-Content-Type-Options "nosniff" always;
# Prevenir clickjacking
add_header X-Frame-Options "SAMEORIGIN" always;
# Atualizar sub-recursos inseguros
add_header Content-Security-Policy "upgrade-insecure-requests" always;
Otimizacao de performance
| Configuração | Config | Beneficio |
|---|---|---|
| HTTP/2 | listen 443 ssl http2; | Multiplexing, compressao de headers |
| Cache de sessao | ssl_session_cache shared:SSL:10m; | Evita re-handshake para visitantes recorrentes |
| Session tickets desligados | ssl_session_tickets off; | Melhor forward secrecy |
| OCSP stapling | ssl_stapling on; | Verificação de cert mais rápida, melhor privacidade |
| Early data (0-RTT) | Padrão no TLS 1.3 | Retomada com zero latencia (use com cautela) |
Configuração Nginx completa (pronta para producao)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
root /var/www/html;
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Teste: Cole seu domínio no SSL Labs — esta configuração deve obter nota A+.
O que NAO fazer
| Ma prática | Por que | O que fazer em vez disso |
|---|---|---|
ssl_protocols TLSv1 TLSv1.1; | Descontinuados, vulneraveis | Apenas TLS 1.2 + 1.3 |
ssl_ciphers ALL; | Inclui ciphers fracos | Lista explicita ECDHE + AEAD |
ssl_prefer_server_ciphers on; (TLS 1.3) | Desnecessario — ciphers TLS 1.3 sao todos seguros | off |
Usar cert.pem em vez de fullchain.pem | Cadeia ausente → erros de confiança | Sempre fullchain.pem para Nginx |
| Certs auto-assinados em producao | Avisos do navegador, sem confiança | Let’s Encrypt (gratuito) |
| Mesma chave privada por anos | Limita contencao de danos | Rotacione em cada renovação |
| Sem HSTS | Vulneravel a ataques de downgrade | Habilite após testar |
max-age=0 para HSTS | Efetivamente desabilita HSTS | Comece com 300, aumente para 63072000 |
Perguntas frequentes
Como testo minha configuração SSL?
SSL Labs Server Test — insira seu domínio, obtenha um relatorio detalhado com nota (A-F). Verifica suporte a protocolos, forca dos ciphers, validade da cadeia e vulnerabilidades conhecidas.
Qual nota devo almejar?
A+ para sites em producao. Isso requer: apenas TLS 1.2+, ciphers AEAD, cadeia válida, HSTS com max-age longo. A configuração acima alcanca A+.
Com que frequencia devo revisar minha configuração SSL?
Anualmente, ou quando uma nova vulnerabilidade e anunciada. Inscreva-se na página de status do Let’s Encrypt e siga o Mozilla SSL Configuration Generator para recomendacoes atualizadas.
Existe uma ferramenta que gera a configuração correta para mim?
Sim — Mozilla SSL Configuration Generator. Selecione seu servidor (Nginx, Apache, etc.), a versão do servidor, e ele gera uma configuração recomendada. O perfil “Modern” corresponde as praticas deste artigo.