Síntoma y contexto
El visitante ve tu conexión no es privada, ERR_CERT_DATE_INVALID, ERR_CERT_AUTHORITY_INVALID o el nombre del dominio no coincide. En Cloudflare pueden aparecer 525 SSL Handshake Failed o 526 Invalid SSL Certificate en lugar de tu página. Los certificados TLS tienen fecha de fin; Let's Encrypt emite cada 90 días y depende de renovación automática. Si el cron falló, el hosting cambió o migraste sin reinstalar certbot, el sitio se cae en HTTPS aunque el servidor siga encendido.
Esta guía profundiza en SSL. Para diagnóstico general de caídas mezclando DNS y origen, usa la web no carga. Para bucles tras forzar HTTPS, demasiadas redirecciones.
Causas probables
- Certificado expirado. Renovación automática desactivada o tarea cron que dejó de ejecutarse tras migración.
- Dominio no incluido en el cert. Cert solo para
wwwpero entras por apex, o subdominio nuevo sin SAN. - Origen sin cert con Cloudflare Full (strict). Cloudflare exige cert válido en el servidor de origen.
- Certificado de staging o autofirmado en producción. Quedó un cert de prueba tras deploy.
- Cadena intermedia incompleta. Algunos clientes antiguos fallan; navegadores modernos suelen mostrar error distinto.
- Reloj del servidor mal. Raro en hosting gestionado; la validez del cert depende de hora correcta en el servidor.
Checklist copiable
SSL - [tu-dominio.com] Fecha: ___________ 1. ERROR VISIBLE [ ] ERR_CERT_DATE_INVALID (caducado) [ ] Nombre no coincide [ ] 525 / 526 Cloudflare [ ] Otro: ___________ 2. CERTIFICADO (openssl o navegador) Expira: ___________ Emitido para: ___________ 3. INFRAESTRUCTURA [ ] Let's Encrypt / certbot [ ] Cert del hosting (cPanel, Plesk) [ ] Cloudflare proxy: Sí / No Modo SSL Cloudflare: ___________ 4. RENOVACIÓN [ ] cron / tarea automática activa Último error en log: ___________ 5. TRAS RENOVAR [ ] Probado https:// y https://www/ [ ] Incógnito sin error
Qué capturar antes de escribir
Captura del error del navegador con fecha y URL exacta. Salida de:
echo | openssl s_client -servername tudominio.com -connect tudominio.com:443 2>/dev/null | openssl x509 -noout -dates -subject
Si usas Cloudflare, captura del modo SSL y si el origen tiene certificado de origen o Let's Encrypt en el servidor. No envíes claves privadas del certificado.
Renovación según entorno
Let's Encrypt en VPS propio
Prueba renovación en seco: certbot renew --dry-run. Si falla, lee el log en /var/log/letsencrypt/. Causas habituales: puerto 80 cerrado durante desafío HTTP-01, DNS que no apunta al servidor, o límite de rate de Let's Encrypt por demasiados intentos fallidos.
Hosting con panel (cPanel, Plesk)
Busca SSL/TLS → certificados. Muchos hostings renuevan Let's Encrypt solos si el dominio apunta correctamente. Si hay botón Renovar, úsalo en horario de poco tráfico.
Cloudflare como proxy
Entre visitante y Cloudflare el cert lo gestiona Cloudflare (válido). El 525/526 suele ser fallo entre Cloudflare y origen. Opciones: instalar cert válido en origen, usar Cloudflare Origin Certificate (válido solo entre CF y origen), o modo Full strict con Let's Encrypt en el servidor.
Sitio estático (Cloudflare Pages, GitHub Pages)
El TLS lo termina la plataforma. Si ves error de cert, revisa dominio custom bien configurado en el panel y que los registros DNS son los que pide la plataforma. No necesitas certbot en tu máquina.
Errores frecuentes al renovar
Rate limit de Let's Encrypt: demasiados intentos fallidos en una semana bloquean nuevas emisiones. Espera o usa el entorno de staging para pruebas (--staging) sin gastar cuota de producción.
Puerto 80 cerrado: el desafío HTTP-01 necesita que Let's Encrypt alcance tu servidor por http en el puerto 80. Si un firewall o el proveedor bloquea 80, usa desafío DNS-01 con API del registrador (más técnico pero funciona con origen cerrado).
Varios servidores con el mismo dominio: renovar en uno no actualiza el otro. El balanceador puede servir un nodo con cert viejo. Unifica o automatiza renovación en todos los nodos.
Mixed content tras renovar
A veces el certificado ya es válido pero el candado sigue roto porque la página carga imágenes, scripts o CSS por http://. Abre la consola del navegador y busca avisos Mixed Content. Corrige URLs a https o rutas relativas. En WordPress, plugins de SSL pueden reescribir enlaces en base de datos; haz copia antes si tocas producción.
Navegador vs Cloudflare 525/526: no es lo mismo
- Error del navegador (
ERR_CERT_DATE_INVALID, nombre no coincide, autoridad no válida): el visitante ve el problema del certificado en la conexión que termina en su cliente. Suele ser el cert del sitio (o del CDN) caducado, incompleto o para otro dominio. - Error 525 SSL Handshake Failed: Cloudflare no completa el handshake TLS con el origen. El visitante ya habla bien con Cloudflare; el fallo está detrás. Guía dedicada: error 525 Cloudflare.
- Error 526 Invalid SSL Certificate: Cloudflare en Full (strict) rechaza el certificado del origen (caducado, autofirmado, nombre incorrecto). Renueva o instala un cert válido en origen, o un Origin Certificate de Cloudflare.
- Error 522: no es SSL: el origen no responde a tiempo. Ver error 522 Cloudflare.
Clasificar el código evita renovar el cert del edge cuando el problema es el origen, o pelear con Full strict cuando el navegador solo muestra un cert caducado en un sitio sin proxy.
certbot: fallos habituales al renovar
Si usas Let's Encrypt en un VPS, el síntoma “cert caducado” casi siempre es renovación automática rota. Prueba en seco y lee el log:
sudo certbot renew --dry-run sudo tail -n 80 /var/log/letsencrypt/letsencrypt.log
Causas frecuentes: puerto 80 cerrado (HTTP-01), DNS que ya no apunta a este servidor, cron o timer systemd desactivado tras una migración, y rate limit por demasiados intentos fallidos. La guía Let's Encrypt no renueva profundiza en timers, DNS-01 y límites. No pegues claves privadas ni el contenido de /etc/letsencrypt/live/ en el formulario: basta el mensaje de error del dry-run.
Origin Certificate de Cloudflare
Si Cloudflare hace de proxy (nube naranja) y el origen es un VPS o hosting propio, puedes instalar un Origin Certificate emitido por Cloudflare. Ese cert es válido entre Cloudflare y tu servidor; no lo uses para exponer el origen directamente a Internet sin proxy. Combínalo con modo Full (strict). Si el origen es Cloudflare Pages o similar, la plataforma gestiona el TLS del visitante y no necesitas Origin Certificate en tu máquina.
Checklist mixed content (candado roto con cert válido)
MIXED CONTENT - [URL] Fecha: ___________ 1. Consola del navegador [ ] Avisos Mixed Content listados Recursos http:// encontrados: ___________ 2. Origen de las URLs [ ] Hardcodeadas en plantilla [ ] Base de datos / CMS [ ] CDN o plugin de caché 3. Corrección [ ] Cambié a https:// o // [ ] Purgé caché CDN / plugin [ ] Probé en incógnito
Cuándo escalar
Escala si certbot renew falla tras tres intentos con mensaje que no entiendes, si 526 persiste con Full strict y cert recién emitido, o si mezclas varios subdominios y no sabes qué cert reemitir. Categoría Web o despliegue.
Relacionado: La web no carga, Error 525 Cloudflare, Let's Encrypt no renueva, Demasiadas redirecciones, Error deploy Cloudflare Pages.