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.