Guia completo de certificados SSL
Conteúdo
O que é SSL/TLS?
SSL (Secure Sockets Layer) e seu sucessor TLS (Transport Layer Security) são protocolos criptográficos que protegem a comunicação na internet. Quando você visita um site HTTPS, o TLS criptografa a conexão entre seu navegador e o servidor, prevenindo interceptação e adulteração de dados.
- Criptografia — protege dados sensíveis em trânsito
- Autenticação — confirma a identidade do servidor
- Integridade — garante que os dados não foram modificados
- SEO — o Google usa HTTPS como sinal de ranqueamento
- Confiança — os navegadores mostram um ícone de cadeado para sites HTTPS
Como funciona
O handshake TLS estabelece uma conexão segura nestes passos:
- Client hello — o navegador envia as versões TLS e suítes de cifra suportadas
- Server hello — o servidor seleciona uma versão/cifra e envia seu certificado
- Verificação do certificado — o navegador valida o certificado (emissor, validade, correspondência de domínio)
- Troca de chaves — ambas as partes derivam uma chave de sessão compartilhada
- Comunicação criptografada — todo o tráfego subsequente é criptografado
Cadeia de certificados
CA raiz
└─ CA intermediária
└─ Certificado de entidade final (seu site)
Os navegadores confiam em uma lista integrada de CAs raiz. Eles validam seu certificado percorrendo a cadeia até uma raiz confiável.
Tipos de certificados
Por nível de validação
DV — Validação de domínio
Verifica apenas a propriedade do domínio. Emitido em minutos. Gratuito com Let's Encrypt. Adequado para a maioria dos sites.
OV — Validação de organização
Verifica a propriedade do domínio mais a identidade da organização. Leva 1–3 dias úteis. Adequado para sites empresariais.
EV — Validação estendida
A verificação mais rigorosa — checagens de entidade legal, verificação telefônica. Leva 1–2 semanas. Usado por bancos e grandes e-commerces. Nota: desde 2019, os principais navegadores não exibem mais a barra verde com o nome da organização.
Por cobertura
- Domínio único — cobre um domínio, ex.
www.example.com - Wildcard — cobre todos os subdomínios, ex.
*.example.com - Multi-domínio (SAN) — cobre múltiplos domínios diferentes em um único certificado
Como verificar um certificado
Navegador
Clique no ícone do cadeado na barra de endereços → ver detalhes do certificado: emitido para, emissor, data de validade.
Linha de comando
# Ver informações do certificado
openssl s_client -connect example.com:443 -servername example.com
# Verificar data de validade
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates
Ferramentas online
- SSL Labs — teste completo de configuração SSL
- 301check.com — mostra informações TLS em cada salto de uma cadeia de redirecionamento
- crt.sh — busca em logs de transparência de certificados
Erros comuns
Certificado expirado — NET::ERR_CERT_DATE_INVALID
Renove o certificado. Use a renovação automática do Certbot para prevenir isso.
Domínio não corresponde — NET::ERR_CERT_COMMON_NAME_INVALID
O certificado não cobre o domínio acessado. Obtenha um certificado para o domínio correto, ou use um certificado wildcard.
Cadeia incompleta — NET::ERR_CERT_AUTHORITY_INVALID
O certificado intermediário está faltando na configuração do servidor.
# Nginx — use fullchain.pem, não apenas cert.pem
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
Conteúdo misto
Uma página HTTPS carregando recursos HTTP (imagens, scripts, folhas de estilo). Atualize todas as URLs de recursos para HTTPS ou use URLs relativas ao protocolo (//example.com/image.jpg).
Let's Encrypt
O Let's Encrypt é uma CA gratuita, automatizada e aberta mantida pela organização sem fins lucrativos ISRG. Ele tornou o HTTPS acessível para todos.
Certbot (recomendado)
# Instalar no Ubuntu/Debian
sudo apt install certbot python3-certbot-nginx
# Emitir e configurar automaticamente no Nginx
sudo certbot --nginx -d example.com -d www.example.com
# Testar renovação automática
sudo certbot renew --dry-run
# Cron para renovação automática
0 0,12 * * * certbot renew --quiet
acme.sh (alternativa leve)
curl https://get.acme.sh | sh
acme.sh --issue -d example.com -d www.example.com --nginx
Melhores práticas
# Nginx — configuração TLS robusta
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# Habilitar HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
- Configure alertas de expiração de certificados (30 dias antes)
- Use registros DNS CAA para restringir quais CAs podem emitir para seu domínio
- Monitore os logs de transparência de certificados para emissões não autorizadas
- Teste sua configuração com o SSL Labs