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.

Como funciona

O handshake TLS estabelece uma conexão segura nestes passos:

  1. Client hello — o navegador envia as versões TLS e suítes de cifra suportadas
  2. Server hello — o servidor seleciona uma versão/cifra e envia seu certificado
  3. Verificação do certificado — o navegador valida o certificado (emissor, validade, correspondência de domínio)
  4. Troca de chaves — ambas as partes derivam uma chave de sessão compartilhada
  5. 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

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

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;