La revocación de certificados es el proceso de invalidar un certificado SSL antes de su fecha de vencimiento, generalmente porque la clave privada fue comprometida, el certificado fue emitido incorrectamente o cambió la propiedad del dominio.
En teoría, la revocación es la forma en que el sistema de CA maneja las emergencias. En la práctica, es la parte más débil de la infraestructura PKI. A continuación explicamos por qué, y qué la está reemplazando.
Cuándo revocar un certificado
- Clave privada comprometida — filtrada, robada o expuesta (por ejemplo, subida a un repositorio público de Git)
- Certificado emitido incorrectamente — la CA emitió un certificado para un dominio que no controlas
- Dominio vendido — ya no eres propietario del dominio que cubre el certificado
- Cambio de clave — estás rotando claves y quieres invalidar el certificado anterior
- Servidor dado de baja — el certificado ya no debería ser válido
Cómo funciona la revocación
CRL (Lista de Revocación de Certificados)
El mecanismo de revocación original. La CA publica una lista de todos los números de serie de certificados revocados. Los navegadores descargan la lista y verifican contra ella.
Problemas:
- Las CRL crecen con el tiempo (millones de entradas)
- Los navegadores deben descargar la lista completa antes de verificar cualquier certificado
- Lenta y consume mucho ancho de banda — la mayoría de los navegadores dejaron de verificar CRL hace años
OCSP (Protocolo de Estado de Certificados en Línea)
Una verificación en tiempo real. En lugar de descargar una lista, el navegador pregunta al servidor OCSP de la CA: «¿Este certificado está revocado?»
Cómo funciona:
Browser → OCSP Responder: "Is cert serial #12345 still valid?"
OCSP Responder → Browser: "Good" / "Revoked" / "Unknown"
Problemas:
- Privacidad — la CA sabe qué sitios estás visitando (ve cada solicitud OCSP)
- Latencia — añade un viaje de red adicional a cada nueva conexión HTTPS
- Disponibilidad — si el respondedor OCSP está caído, los navegadores típicamente hacen soft-fail (aceptan el certificado de todos modos), lo que hace ineficaz la revocación
OCSP Stapling (la mejora)
El servidor obtiene la respuesta OCSP periódicamente y la «grapa» a la negociación TLS. El navegador recibe el estado de revocación sin contactar a la CA.
Beneficios:
- Sin fuga de privacidad (el navegador no contacta a la CA)
- Sin latencia adicional (la respuesta viene incluida en la negociación)
- Funciona incluso si el servidor OCSP de la CA es lento o está caído
Configuración:
Nginx:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
Apache:
SSLUseStapling on
SSLStaplingCache "shmcb:/var/run/apache2/ssl_stapling(128000)"
CRLite (el futuro)
CRLite de Mozilla comprime todas las revocaciones conocidas en un filtro compacto (~1,5 MB) que se distribuye con las actualizaciones de Firefox. El navegador puede verificar el estado de revocación localmente — sin solicitud de red, sin fuga de privacidad, sin latencia. A partir de 2026, CRLite está habilitado en Firefox y podría ser adoptado por otros navegadores.
La dura realidad sobre la revocación
La revocación está mayormente rota en la práctica:
- Chrome no verifica OCSP ni CRL por defecto (se basa en sus propios CRLSets, un subconjunto curado)
- Safari verifica OCSP pero hace soft-fail (acepta certificados si el servidor OCSP no es accesible)
- Firefox usa CRLite (el mejor enfoque, pero solo para Firefox)
- El soft-fail de OCSP significa que un atacante determinado puede bloquear la verificación OCSP y el navegador aceptará un certificado revocado
Por esto la industria se está moviendo hacia certificados de corta duración como defensa principal:
| Enfoque | Cómo protege |
|---|---|
| Revocación (OCSP/CRL) | Invalida un certificado comprometido — pero la verificación no es confiable |
| Validez corta (90 días → 47 días) | El certificado comprometido expira rápidamente — no se necesita verificación |
Si un certificado es válido solo por 47 días, una clave robada es útil como máximo 47 días. Esto limita el daño incluso cuando la revocación no funciona.
Cómo revocar un certificado de Let’s Encrypt
Si tu clave privada está comprometida:
# With Certbot
sudo certbot revoke --cert-path /etc/letsencrypt/live/yourdomain.com/cert.pem --reason keycompromise
# With acme.sh
acme.sh --revoke -d yourdomain.com
Después de revocar, obtén un nuevo certificado inmediatamente — la revocación no soluciona el problema, solo invalida el certificado anterior. Usa GetHTTPS para emitir un certificado nuevo con un par de claves nuevo.
Preguntas frecuentes
¿Debo habilitar OCSP stapling?
Sí. No garantiza la verificación de revocación (los navegadores pueden ignorarlo), pero es un beneficio neto: negociación TLS más rápida (sin búsqueda OCSP del lado del cliente), mejor privacidad (el navegador no contacta a la CA), y algunos navegadores sí respetan las respuestas OCSP grapadas. Es gratis habilitarlo — Nginx y Apache lo soportan con 2-3 líneas de configuración.
¿Qué tan rápido toma efecto la revocación?
Las CRL se publican periódicamente (horas a días). Las respuestas OCSP se almacenan en caché (típicamente 1-4 horas). En la práctica, un certificado revocado puede seguir siendo «válido» para algunos navegadores hasta por 24 horas. Esta es otra razón por la que los certificados de corta duración están reemplazando a la revocación como defensa principal.
¿Necesito revocar cuando renuevo?
No. Obtener un nuevo certificado no requiere revocar el anterior. El certificado anterior simplemente expira. La revocación solo es necesaria si la clave privada está comprometida, no para la renovación rutinaria.
¿Puedo verificar si un certificado ha sido revocado?
# Check OCSP status
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -status 2>/dev/null | grep "OCSP Response Status"
# "successful" = OCSP stapling is working
# If empty, stapling is not enabled
O consulta crt.sh — los certificados revocados están marcados en la interfaz.