Quando seu navegador se conecta a um site HTTPS, ele não confia no certificado cegamente. Ele verifica uma cadeia de confiança — uma série encadeada de certificados que leva do certificado do seu site até uma Autoridade Certificadora (CA) raiz pré-confiável.
Os três níveis
┌─────────────────────────────────┐
│ CA RAIZ │ Pré-instalada nos navegadores/SO
│ (ISRG Root X1 para LE) │ Auto-assinada, longa validade (20+ anos)
└───────────────┬─────────────────┘
│ assina
▼
┌─────────────────────────────────┐
│ CA INTERMEDIÁRIA │ Assinada pela raiz
│ (Let's Encrypt R3/R10) │ Validade média (5-10 anos)
└───────────────┬─────────────────┘
│ assina
▼
┌─────────────────────────────────┐
│ SEU CERTIFICADO │ Assinado pela intermediária
│ (example.com) │ Validade curta (90 dias para LE)
└─────────────────────────────────┘
CA Raiz — Confiável pelos navegadores e sistemas operacionais. Armazenada no repositório de certificados do dispositivo. Auto-assinada (ninguém assina pela raiz — ela É a âncora de confiança). As chaves raiz são mantidas offline em módulos de segurança de hardware.
CA Intermediária — Assinada pela raiz. É quem efetivamente emite os certificados de entidade final. Se uma intermediária for comprometida, apenas ela precisa ser revogada — a raiz permanece segura.
Certificado de entidade final — Seu certificado. Assinado pela intermediária. É isso que seu servidor envia aos navegadores.
Como a verificação funciona
Quando seu navegador recebe um certificado:
- Lê seu certificado — extrai o nome do emissor
- Encontra a intermediária — da resposta do servidor ou do cache do navegador
- Verifica a assinatura da intermediária — confirma que é assinada por uma raiz confiável
- Verifica a assinatura do seu certificado — confirma que é assinado pela intermediária
- Verifica datas de validade — nenhum certificado está expirado
- Verifica correspondência de domínio — o SAN/CN do certificado corresponde à URL
- Verifica revogação — o certificado não foi revogado (OCSP/CRL)
Se qualquer etapa falhar → o navegador exibe um aviso de segurança.
Por que a intermediária importa
O erro SSL mais comum é um certificado intermediário ausente. Se seu servidor envia apenas seu certificado sem a intermediária, os navegadores não conseguem construir a cadeia de confiança.
Nginx espera o fullchain.pem (seu certificado + intermediária combinados):
ssl_certificate /etc/ssl/fullchain.pem; # cert + intermediária
Apache usa arquivos separados:
SSLCertificateFile /etc/ssl/cert.pem # seu certificado
SSLCertificateChainFile /etc/ssl/chain.pem # intermediária
O GetHTTPS fornece tanto o fullchain.pem quanto os arquivos separados cert.pem + chain.pem, para que você tenha o formato correto para qualquer servidor.
A cadeia da Let’s Encrypt
A cadeia atual da Let’s Encrypt:
ISRG Root X1 (raiz, em todos os repositórios de confiança)
└── Let's Encrypt R10 (intermediária, assina seu certificado)
└── yourdomain.com (seu certificado)
Também existe um caminho com assinatura cruzada através da DST Root CA X3 da IdenTrust para compatibilidade com dispositivos mais antigos, mas isso não é mais necessário para a maioria dos casos de uso.
Perguntas frequentes
Como corrijo erros de “certificado não confiável”?
Quase sempre: a intermediária está faltando. Use fullchain.pem (Nginx) ou adicione SSLCertificateChainFile chain.pem (Apache). Teste com:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
Procure por “verify return:1” (correto) vs “verify return:0” (problema na cadeia).
Posso ver a cadeia no meu navegador?
Sim. Clique no cadeado → “Certificado” (ou “A conexão é segura” → “O certificado é válido”). Você verá a cadeia: seu certificado → intermediária → raiz.
O que acontece se uma CA raiz for comprometida?
A raiz é removida dos repositórios de confiança via atualizações de navegador/SO. Todos os certificados emitidos sob essa raiz tornam-se não confiáveis. Isso é extremamente raro — as chaves raiz são armazenadas em módulos de segurança de hardware offline com controles de acesso físico.
Por que a Let’s Encrypt usa um certificado intermediário em vez de assinar diretamente com a raiz?
Isolamento de segurança. Se a chave intermediária for comprometida, apenas ela precisa ser revogada — a raiz permanece segura. A chave raiz é mantida offline é usada apenas para assinar intermediárias. Esta é a prática padrão de todas as principais Autoridades Certificadoras.
Preciso instalar o certificado raiz no meu servidor?
Não. Os certificados raiz são pré-instalados nos navegadores e sistemas operacionais. Seu servidor só precisa enviar seu certificado + a intermediária. O navegador já possui a raiz e a usa para verificar a cadeia.
Depurando problemas de cadeia
O erro SSL mais comum em produção é uma cadeia de certificados incompleta. Aqui está uma forma sistemática de diagnosticar:
Passo 1: Verifique a cadeia que seu servidor envia
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null
Observe a saída:
Certificate chain
0 s:CN = example.com
i:C = US, O = Let's Encrypt, CN = R10
1 s:C = US, O = Let's Encrypt, CN = R10
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
---
Verify return code: 0 (ok)
- Depth 0 = seu certificado
- Depth 1 = intermediária
- “Verify return code: 0 (ok)” = cadeia está completa
Se você vê apenas depth 0 (sem depth 1), a intermediária está faltando.
Passo 2: Corrija a cadeia
Nginx: Use fullchain.pem (certificado + intermediária combinados):
ssl_certificate /etc/ssl/fullchain.pem; # NÃO cert.pem
Apache: Adicione a intermediária explicitamente:
SSLCertificateChainFile /etc/ssl/chain.pem
Se você perdeu o chain.pem: Baixe a intermediária da Let’s Encrypt em letsencrypt.org/certificates ou reemita seu certificado com o GetHTTPS.
Passo 3: Verifique a correção
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | grep "Verify return code"
# Deve dizer: Verify return code: 0 (ok)