Tópicos Avançados
Troubleshooting
Onde encontrar os logs
# Logs do Certbot
/var/log/letsencrypt/letsencrypt.log
# Ver últimas linhas
tail -100 /var/log/letsencrypt/letsencrypt.log
# Executar com debug
certbot certonly --nginx -d domain.com --debug
Erros comuns e soluções
Challenge failed - Porta 80 bloqueada
ERRO: Challenge failed for domain domain.com
Type: connection
Detail: Fetching http://domain.com/.well-known/acme-challenge/xxx: Connection refused
Causa: Let's Encrypt não consegue acessar a porta 80.
Soluções:
# Verificar se porta 80 está aberta
curl -I http://domain.com/.well-known/acme-challenge/test
# Verificar firewall
sudo ufw status
sudo iptables -L -n | grep 80
# Verificar se Nginx/Apache está rodando
systemctl status nginx
Rate limit exceeded
ERRO: too many certificates already issued for exact set of domains
Causa: Excedeu o limite de 5 certificados idênticos por semana.
Soluções:
# Usar staging para testes (não conta no rate limit)
certbot certonly --test-cert --nginx -d domain.com
# Aguardar 1 semana ou usar domínio diferente para testes
DNS problem - NXDOMAIN
ERRO: DNS problem: NXDOMAIN looking up A for domain.com
Causa: Domínio não existe ou DNS não propagou.
Soluções:
# Verificar se DNS está configurado
dig A domain.com
dig AAAA domain.com
# Verificar propagação
nslookup domain.com 8.8.8.8
Unauthorized - CAA record
ERRO: CAA record for dominio.com prevents issuance
Causa: Registro CAA não autoriza Let's Encrypt.
Solução:
# Verificar CAA atual
dig CAA domain.com
# Adicionar Let's Encrypt ao CAA (no provedor DNS)
dominio.com. CAA 0 issue "letsencrypt.org"
Testar renovação
# Simular renovação (não renova de verdade)
certbot renew --dry-run
# Se falhar, verificar detalhes
certbot renew --dry-run --debug-challenges
Revogação de Certificados
Quando revogar?
| Situação | Ação |
|---|---|
| Chave privada comprometida | Revogar imediatamente |
| Servidor hackeado | Revogar após recuperar controle |
| Domínio vendido/transferido | Revogar antes da transferência |
| Certificado emitido por engano | Revogar |
| Renovação normal | Não precisa revogar |
Como revogar
# Revogar usando o certificado local
certbot revoke --cert-path /etc/letsencrypt/live/domain.com/cert.pem
# Revogar usando a chave privada (se não tiver mais o cert)
certbot revoke --cert-path /path/to/cert.pem --key-path /path/to/privkey.pem
# Motivos de revogação (opcional)
certbot revoke --cert-path /path/to/cert.pem --reason keycompromise
# Motivos: unspecified, keycompromise, affiliationchanged, superseded, cessationofoperation
Após revogar
# Remover certificado revogado do Certbot
certbot delete --cert-name domain.com
# Emitir novo certificado
certbot certonly --nginx -d domain.com
Após revogar, o certificado entra na CRL (Certificate Revocation List) e navegadores passam a rejeitá-lo. Não há como "desrevogar".
Backup e Migração
Backup completo
# Backup de toda a configuração Let's Encrypt
sudo tar -czvf letsencrypt-backup-$(date +%Y%m%d).tar.gz /etc/letsencrypt/
# Arquivos importantes:
# /etc/letsencrypt/live/ - Certificados atuais (symlinks)
# /etc/letsencrypt/archive/ - Histórico de certificados
# /etc/letsencrypt/renewal/ - Configurações de renovação
# /etc/letsencrypt/accounts/ - Credenciais da conta ACME
Migrar para novo servidor
# No servidor ANTIGO - criar backup
sudo tar -czvf letsencrypt-backup.tar.gz /etc/letsencrypt/
# Transferir para novo servidor
scp letsencrypt-backup.tar.gz user@newserver:/tmp/
# No servidor NOVO - restaurar
sudo tar -xzvf /tmp/letsencrypt-backup.tar.gz -C /
# Instalar Certbot no novo servidor e outros plugins se necessário
sudo apt install certbot python3-certbot-nginx
# Verificar certificados restaurados
certbot certificates
# Testar renovação
certbot renew --dry-run
Migração sem backup
Se não tiver backup, emita novos certificados no servidor novo:
# No novo servidor (após DNS apontar para ele)
certbot certonly --nginx -d domain.com
Ao transferir domínio para outro proprietário, revogue seus certificados antes. O novo dono pode emitir certificados próprios.
Certificate Transparency
Certificate Transparency (CT) é um sistema público que registra todos os certificados emitidos por CAs. Isso permite:
- Detectar certificados fraudulentos
- Monitorar emissões para seu domínio
- Auditoria de CAs
Consultar certificados emitidos
Use crt.sh para ver todos os certificados emitidos para seu domínio:
# Via navegador
https://crt.sh/?q=yourdomain.com
# Via API
curl "https://crt.sh/?q=yourdomain.com&output=json" | jq
Monitoramento automático
Configure alertas para ser notificado quando novos certificados forem emitidos:
Opção 1: Facebook Certificate Transparency Monitoring
- Acesse developers.facebook.com/tools/ct
- Cadastre seu domínio para receber alertas por email
Opção 2: Certspotter (gratuito)
# Consultar via API
curl "https://api.certspotter.com/v1/issuances?domain=seudominio.com&include_subdomains=true&expand=dns_names"
Opção 3: Script de monitoramento
#!/bin/bash
# Verificar novos certificados (executar via cron)
DOMAIN="seudominio.com"
CERTS=$(curl -s "https://crt.sh/?q=${DOMAIN}&output=json" | jq length)
echo "Total de certificados para ${DOMAIN}: ${CERTS}"
Por que monitorar?
| Cenário | O que significa |
|---|---|
| Certificado que você não emitiu | Possível comprometimento ou ataque |
| Muitos certificados em curto período | Possível abuso ou configuração errada |
| Certificado de CA desconhecida | Investigar imediatamente |
Todos os certificados Let's Encrypt aparecem em logs CT. Isso é normal e esperado - a transparência aumenta a segurança do ecossistema.