Cuando tu navegador se conecta a un sitio HTTPS, no confía en el certificado a ciegas. Verifica una cadena de confianza — una serie enlazada de certificados que va desde el certificado de tu sitio hasta una Autoridad Certificadora (CA) raíz preinstalada y de confianza.
Los tres niveles
┌─────────────────────────────────┐
│ ROOT CA │ Pre-instalada en navegadores/SO
│ (ISRG Root X1 for LE) │ Autofirmada, validez larga (20+ años)
└───────────────┬─────────────────┘
│ firma
▼
┌─────────────────────────────────┐
│ CA INTERMEDIA │ Firmada por la raíz
│ (Let's Encrypt R3/R10) │ Validez media (5-10 años)
└───────────────┬─────────────────┘
│ firma
▼
┌─────────────────────────────────┐
│ TU CERTIFICADO │ Firmado por la intermedia
│ (example.com) │ Validez corta (90 días para LE)
└─────────────────────────────────┘
CA raíz — De confianza para navegadores y sistemas operativos. Almacenada en el almacén de certificados del dispositivo. Autofirmada (nadie firma por la raíz — ella ES el ancla de confianza). Las claves raíz se mantienen fuera de línea en módulos de seguridad de hardware.
CA intermedia — Firmada por la raíz. Es la que realmente emite los certificados de entidad final. Si una intermedia se ve comprometida, solo ella necesita ser revocada — la raíz permanece segura.
Certificado de entidad final — Tu certificado. Firmado por la intermedia. Esto es lo que tu servidor envía a los navegadores.
Cómo funciona la verificación
Cuando tu navegador recibe un certificado:
- Lee tu certificado — extrae el nombre del emisor
- Encuentra la intermedia — ya sea de la respuesta del servidor o de la caché del navegador
- Verifica la firma de la intermedia — comprueba que esté firmada por una raíz de confianza
- Verifica la firma de tu certificado — comprueba que esté firmado por la intermedia
- Verifica fechas de validez — ningún certificado está expirado
- Verifica coincidencia de dominio — el SAN/CN del certificado coincide con la URL
- Verifica revocación — el certificado no ha sido revocado (OCSP/CRL)
Si algún paso falla → el navegador muestra una advertencia de seguridad.
Por qué importa la intermedia
El error SSL más común es una cadena de certificados intermedia faltante. Si tu servidor envía solo tu certificado sin la intermedia, los navegadores no pueden construir la cadena de confianza.
Nginx espera fullchain.pem (tu certificado + intermedia combinados):
ssl_certificate /etc/ssl/fullchain.pem; # cert + intermediate
Apache usa archivos separados:
SSLCertificateFile /etc/ssl/cert.pem # your cert
SSLCertificateChainFile /etc/ssl/chain.pem # intermediate
GetHTTPS proporciona tanto fullchain.pem como archivos separados cert.pem + chain.pem, para que tengas el formato correcto para cualquier servidor.
La cadena de Let’s Encrypt
La cadena actual de Let’s Encrypt:
ISRG Root X1 (root, in all trust stores)
└── Let's Encrypt R10 (intermediate, signs your cert)
└── yourdomain.com (your certificate)
También existe una ruta con firma cruzada a través de DST Root CA X3 de IdenTrust para compatibilidad con dispositivos antiguos, pero ya no es necesaria para la mayoría de los casos de uso.
Preguntas frecuentes
¿Cómo soluciono los errores de «certificado no confiable»?
Casi siempre: te falta el certificado intermedio. Usa fullchain.pem (Nginx) o añade SSLCertificateChainFile chain.pem (Apache). Prueba con:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
Busca «verify return:1» (bien) vs «verify return:0» (problema de cadena).
¿Puedo ver la cadena en mi navegador?
Sí. Haz clic en el candado → «Certificado» (o «La conexión es segura» → «El certificado es válido»). Verás la cadena: tu certificado → intermedia → raíz.
¿Qué sucede si una CA raíz se ve comprometida?
La raíz se elimina de los almacenes de confianza vía actualizaciones de navegador/SO. Todos los certificados emitidos bajo esa raíz dejan de ser confiables. Esto es extremadamente raro — las claves raíz se almacenan en módulos de seguridad de hardware fuera de línea con controles de acceso físico.
¿Por qué Let’s Encrypt usa un certificado intermedio en lugar de firmar directamente con la raíz?
Aislamiento de seguridad. Si la clave intermedia se ve comprometida, solo ella necesita ser revocada — la raíz permanece segura. La clave raíz se mantiene fuera de línea y solo se usa para firmar intermedias. Esta es una práctica estándar de todas las Autoridades Certificadoras importantes.
¿Necesito instalar el certificado raíz en mi servidor?
No. Los certificados raíz están preinstalados en navegadores y sistemas operativos. Tu servidor solo necesita enviar tu certificado + la intermedia. El navegador ya tiene la raíz y la usa para verificar la cadena.
Depuración de problemas de cadena
El error SSL más común en producción es una cadena de certificados incompleta. Aquí tienes una forma sistemática de diagnosticarlo:
Paso 1: Verificar la cadena que envía tu servidor
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null
Observa la salida:
Certificate chain
0 s:CN = example.com
i:C = US, O = Let's Encrypt, CN = R10
1 s:C = US, O = Let's Encrypt, CN = R10
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
---
Verify return code: 0 (ok)
- Depth 0 = tu certificado
- Depth 1 = intermedia
- «Verify return code: 0 (ok)» = cadena completa
Si solo ves depth 0 (sin depth 1), la intermedia falta.
Paso 2: Corregir la cadena
Nginx: Usa fullchain.pem (certificado + intermedia combinados):
ssl_certificate /etc/ssl/fullchain.pem; # NOT cert.pem
Apache: Añade la intermedia explícitamente:
SSLCertificateChainFile /etc/ssl/chain.pem
Si perdiste chain.pem: Descarga la intermedia de Let’s Encrypt desde letsencrypt.org/certificates o vuelve a emitir tu certificado con GetHTTPS.
Paso 3: Verificar la corrección
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | grep "Verify return code"
# Must say: Verify return code: 0 (ok)