Temas Avanzados
Troubleshooting
Dónde encontrar los logs
# Logs de Certbot
/var/log/letsencrypt/letsencrypt.log
# Ver últimas líneas
tail -100 /var/log/letsencrypt/letsencrypt.log
# Ejecutar con debug
certbot certonly --nginx -d domain.com --debug
Errores comunes y soluciones
Challenge failed - Puerto 80 bloqueado
ERROR: Challenge failed for domain domain.com
Type: connection
Detail: Fetching http://domain.com/.well-known/acme-challenge/xxx: Connection refused
Causa: Let's Encrypt no puede acceder al puerto 80.
Soluciones:
# Verificar si el puerto 80 está abierto
curl -I http://domain.com/.well-known/acme-challenge/test
# Verificar firewall
sudo ufw status
sudo iptables -L -n | grep 80
# Verificar si Nginx/Apache está corriendo
systemctl status nginx
Rate limit exceeded
ERROR: too many certificates already issued for exact set of domains
Causa: Excedió el límite de 5 certificados idénticos por semana.
Soluciones:
# Usar staging para pruebas (no cuenta en el rate limit)
certbot certonly --test-cert --nginx -d domain.com
# Esperar 1 semana o usar dominio diferente para pruebas
DNS problem - NXDOMAIN
ERROR: DNS problem: NXDOMAIN looking up A for domain.com
Causa: El dominio no existe o el DNS no propagó.
Soluciones:
# Verificar si el DNS está configurado
dig A domain.com
dig AAAA domain.com
# Verificar propagación
nslookup domain.com 8.8.8.8
Unauthorized - CAA record
ERROR: CAA record for domain.com prevents issuance
Causa: El registro CAA no autoriza Let's Encrypt.
Solución:
# Verificar CAA actual
dig CAA domain.com
# Agregar Let's Encrypt al CAA (en el proveedor DNS)
domain.com. CAA 0 issue "letsencrypt.org"
Probar renovación
# Simular renovación (no renueva de verdad)
certbot renew --dry-run
# Si falla, verificar detalles
certbot renew --dry-run --debug-challenges
Revocación de Certificados
¿Cuándo revocar?
| Situación | Acción |
|---|---|
| Clave privada comprometida | Revocar inmediatamente |
| Servidor hackeado | Revocar después de recuperar control |
| Dominio vendido/transferido | Revocar antes de la transferencia |
| Certificado emitido por error | Revocar |
| Renovación normal | No necesita revocar |
Cómo revocar
# Revocar usando el certificado local
certbot revoke --cert-path /etc/letsencrypt/live/domain.com/cert.pem
# Revocar usando la clave privada (si ya no tienes el cert)
certbot revoke --cert-path /path/to/cert.pem --key-path /path/to/privkey.pem
# Motivos de revocación (opcional)
certbot revoke --cert-path /path/to/cert.pem --reason keycompromise
# Motivos: unspecified, keycompromise, affiliationchanged, superseded, cessationofoperation
Después de revocar
# Eliminar certificado revocado de Certbot
certbot delete --cert-name domain.com
# Emitir nuevo certificado
certbot certonly --nginx -d domain.com
Después de revocar, el certificado entra en la CRL (Certificate Revocation List) y los navegadores pasan a rechazarlo. No hay forma de "desrevocar".
Backup y Migración
Backup completo
# Backup de toda la configuración Let's Encrypt
sudo tar -czvf letsencrypt-backup-$(date +%Y%m%d).tar.gz /etc/letsencrypt/
# Archivos importantes:
# /etc/letsencrypt/live/ - Certificados actuales (symlinks)
# /etc/letsencrypt/archive/ - Historial de certificados
# /etc/letsencrypt/renewal/ - Configuraciones de renovación
# /etc/letsencrypt/accounts/ - Credenciales de la cuenta ACME
Migrar a nuevo servidor
# En el servidor ANTIGUO - crear backup
sudo tar -czvf letsencrypt-backup.tar.gz /etc/letsencrypt/
# Transferir al nuevo servidor
scp letsencrypt-backup.tar.gz user@newserver:/tmp/
# En el servidor NUEVO - restaurar
sudo tar -xzvf /tmp/letsencrypt-backup.tar.gz -C /
# Instalar Certbot en el nuevo servidor y otros plugins si es necesario
sudo apt install certbot python3-certbot-nginx
# Verificar certificados restaurados
certbot certificates
# Probar renovación
certbot renew --dry-run
Migración sin backup
Si no tienes backup, emite nuevos certificados en el servidor nuevo:
# En el nuevo servidor (después de que DNS apunte a él)
certbot certonly --nginx -d domain.com
Al transferir un dominio a otro propietario, revoca tus certificados antes. El nuevo dueño puede emitir certificados propios.
Certificate Transparency
Certificate Transparency (CT) es un sistema público que registra todos los certificados emitidos por CAs. Esto permite:
- Detectar certificados fraudulentos
- Monitorear emisiones para tu dominio
- Auditoría de CAs
Consultar certificados emitidos
Usa crt.sh para ver todos los certificados emitidos para tu dominio:
# Vía navegador
https://crt.sh/?q=tudominio.com
# Vía API
curl "https://crt.sh/?q=tudominio.com&output=json" | jq
Monitoreo automático
Configura alertas para ser notificado cuando nuevos certificados sean emitidos:
Opción 1: Facebook Certificate Transparency Monitoring
- Accede a developers.facebook.com/tools/ct
- Registra tu dominio para recibir alertas por email
Opción 2: Certspotter (gratuito)
# Consultar vía API
curl "https://api.certspotter.com/v1/issuances?domain=tudominio.com&include_subdomains=true&expand=dns_names"
Opción 3: Script de monitoreo
#!/bin/bash
# Verificar nuevos certificados (ejecutar vía cron)
DOMAIN="tudominio.com"
CERTS=$(curl -s "https://crt.sh/?q=${DOMAIN}&output=json" | jq length)
echo "Total de certificados para ${DOMAIN}: ${CERTS}"
¿Por qué monitorear?
| Escenario | Qué significa |
|---|---|
| Certificado que no emitiste | Posible compromiso o ataque |
| Muchos certificados en corto período | Posible abuso o configuración incorrecta |
| Certificado de CA desconocida | Investigar inmediatamente |
Todos los certificados Let's Encrypt aparecen en logs CT. Esto es normal y esperado - la transparencia aumenta la seguridad del ecosistema.