Skip to main content

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ónAcción
Clave privada comprometidaRevocar inmediatamente
Servidor hackeadoRevocar después de recuperar control
Dominio vendido/transferidoRevocar antes de la transferencia
Certificado emitido por errorRevocar
Renovación normalNo 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
La revocación es irreversible

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
Transferencia de dominio

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

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?

EscenarioQué significa
Certificado que no emitistePosible compromiso o ataque
Muchos certificados en corto períodoPosible abuso o configuración incorrecta
Certificado de CA desconocidaInvestigar inmediatamente
CT es público

Todos los certificados Let's Encrypt aparecen en logs CT. Esto es normal y esperado - la transparencia aumenta la seguridad del ecosistema.