Error 525 en Cloudflare

El visitante llega a Cloudflare, pero Cloudflare no completa el handshake SSL con tu servidor de origen.

Síntoma y contexto

El Error 525 SSL handshake failed aparece cuando Cloudflare puede recibir la visita del usuario, pero no consigue completar la negociación TLS con el servidor de origen. El certificado que ve el visitante en el borde de Cloudflare puede estar bien. El fallo está en el tramo que va desde Cloudflare hasta tu hosting, VPS o servidor detrás del proxy.

Esto lo distingue de un certificado SSL caducado normal. Si el navegador muestra ERR_CERT_DATE_INVALID al entrar en un sitio sin proxy, el problema suele ser el certificado servido al visitante. En un 525, Cloudflare ya está delante y muestra su propia página de error. La pregunta correcta es: qué certificado, puerto, versión TLS o firewall está presentando el origen a Cloudflare.

La situación es frecuente tras migrar hosting, activar Full o Full (strict), instalar un certificado nuevo, cambiar de panel, bloquear países o endurecer reglas de firewall. También puede pasar si el origen solo acepta TLS antiguo, si no soporta SNI para el dominio solicitado o si sirve un certificado de otro hostname. Para una caída completa sin respuesta del origen, consulta la web no carga. Para timeout entre Cloudflare y origen, mira Error 522 Cloudflare.

Causas probables

  1. Certificado ausente o inválido en origen. El servidor no tiene certificado para el dominio, sirve uno caducado o entrega un certificado para otro hostname.
  2. Modo Full strict con certificado no confiable. Full strict exige un certificado válido en origen: Let's Encrypt, comercial o Cloudflare Origin Certificate correctamente instalado.
  3. Origen solo preparado para HTTP. Cloudflare intenta conectar por HTTPS al puerto 443, pero el servidor no escucha, tiene vhost incompleto o el servicio TLS está parado.
  4. Firewall que bloquea IPs de Cloudflare. Un WAF, fail2ban, regla de proveedor o firewall local puede rechazar conexiones legítimas desde rangos de Cloudflare.
  5. SNI mal configurado. El origen no reconoce el nombre solicitado y devuelve el certificado por defecto, que no coincide con el dominio.
  6. Cadena TLS o cifrados incompatibles. Servidores antiguos pueden aceptar solo protocolos o ciphers que Cloudflare ya no usa.
  7. Origin Certificate instalado en el sitio equivocado. Un certificado de Cloudflare Origin sirve para la conexión con Cloudflare, pero debe estar en el vhost correcto y cubrir el hostname.
  8. Cambios simultáneos de DNS, proxy y SSL. Si se cambia IP de origen, modo SSL y certificado a la vez, Cloudflare puede acabar apuntando a un servidor distinto del que se acaba de configurar.

Checklist copiable

ERROR 525 CLOUDFLARE - [dominio]
Fecha: ___________  Hora (zona): ___________

1. HOSTNAME AFECTADO
   [ ] dominio.com
   [ ] www.dominio.com
   [ ] subdominio: ___________
   Ruta de ejemplo: ___________

2. CLOUDFLARE
   [ ] Registro proxied (nube naranja)
   [ ] Registro DNS only (nube gris)
   Modo SSL/TLS: Flexible / Full / Full strict: ___________
   Always Use HTTPS activo: Sí / No / No sé

3. ORIGEN
   Hosting o VPS: ___________
   IP de origen conocida: Sí / No
   Puerto 443 abierto: Sí / No / No sé
   Certificado instalado en origen: Let's Encrypt / Origin Certificate / otro / no sé

4. PRUEBAS
   [ ] openssl contra origen
   [ ] curl -I con Host header si conozco la IP
   [ ] Revisión de logs nginx, Apache o panel
   [ ] Firewall revisado para IPs de Cloudflare

5. CAMBIOS RECIENTES
   [ ] Migración de hosting
   [ ] Cambio de modo SSL
   [ ] Renovación de certificado
   [ ] Cambio de firewall o WAF
   Detalle: ___________

6. NO ENVIAR
   [ ] Sin claves privadas de certificados
   [ ] Sin contraseñas del panel
   [ ] Sin tokens de API de Cloudflare

Qué capturar antes de escribir

Guarda una captura de la página 525 completa, con el dominio visible y la hora. Después captura el panel de Cloudflare en SSL/TLS, especialmente el modo activo: Flexible, Full o Full (strict). En DNS, confirma que el registro afectado está con proxy activo si realmente estás diagnosticando un error de Cloudflare.

Del servidor de origen, lo útil es una captura del certificado instalado o la salida de openssl indicando fechas, subject y errores de verificación. No compartas la clave privada del certificado, el archivo privkey.pem, tokens de Cloudflare ni credenciales del panel. Si usas un Origin Certificate de Cloudflare, basta con decirlo y mostrar que cubre el hostname, sin pegar la clave.

Anota si el error empezó tras cambiar de Flexible a Full strict. Esa transición es correcta cuando el origen tiene certificado válido, pero revela problemas ocultos: antes Cloudflare hablaba HTTP con el origen, después exige HTTPS. Si el origen no estaba preparado, aparece el 525.

Comandos y paneles útiles

Desde terminal puedes comprobar el certificado que presenta el servidor. Sustituye dominio e IP si conoces el origen. No publiques la IP si no quieres exponer infraestructura, pero sí puedes usarla para tu diagnóstico.

# Ver cabeceras pasando por Cloudflare
curl -I https://tudominio.com

# Ver certificado presentado por el hostname público
echo | openssl s_client -connect tudominio.com:443 -servername tudominio.com 2>/dev/null | openssl x509 -noout -dates -subject -issuer

# Si conoces la IP de origen, probar SNI contra esa IP
echo | openssl s_client -connect 203.0.113.10:443 -servername tudominio.com 2>/dev/null | openssl x509 -noout -dates -subject -issuer

# Ver cadena con detalle si hay error de handshake
openssl s_client -connect tudominio.com:443 -servername tudominio.com

Paneles a revisar: Cloudflare SSL/TLS Overview, Origin Server, DNS, Security Events y WAF; en el hosting, certificado del dominio, logs de nginx o Apache, selector de PHP si el panel lo mezcla con SSL, y firewall del servidor. En VPS, revisa que nginx o Apache escucha en 443 y que el vhost del dominio tiene el certificado correcto.

Pasos por escenario

Matriz Flexible, Full y Full strict

  • Flexible: visitante a Cloudflare por HTTPS, Cloudflare a origen por HTTP. Evita 525 porque no hace TLS con el origen, pero puede causar bucles si el servidor fuerza HTTPS. No es la solución estable para un sitio que puede servir HTTPS.
  • Full: Cloudflare conecta al origen por HTTPS, pero acepta certificado autofirmado o no verificable. Puede funcionar como transición, aunque no valida identidad del origen.
  • Full strict: Cloudflare conecta por HTTPS y exige certificado válido para el hostname. Es el modo recomendado cuando el origen tiene Let's Encrypt, certificado comercial o Cloudflare Origin Certificate bien instalado.

Si estás en Flexible y hay redirecciones infinitas, consulta demasiadas redirecciones. Si pasaste a Full strict y nació el 525, instala o corrige el certificado de origen antes de seguir cambiando reglas.

El origen no tiene certificado válido

Instala Let's Encrypt desde el panel o certbot si gestionas el VPS. Si el sitio siempre estará detrás de Cloudflare, un Origin Certificate también es válido para Full strict, pero no sirve para que usuarios entren directamente al origen sin Cloudflare. Tras instalar, prueba con openssl y purga caché solo si la web servía contenido antiguo.

El certificado existe pero Cloudflare no lo acepta

Comprueba que cubre el hostname exacto. Un certificado para www.dominio.com no cubre necesariamente dominio.com. Revisa cadena intermedia, fecha de caducidad y SNI. Si el servidor entrega un certificado por defecto, el vhost de nginx o Apache puede no estar asociado al server_name correcto.

Firewall o proveedor bloquea Cloudflare

Si el origen responde desde tu IP pero Cloudflare muestra 525, revisa firewall, WAF, reglas de geobloqueo y herramientas como fail2ban. El servidor debe permitir conexiones desde los rangos oficiales de Cloudflare en 443, y normalmente también en 80 si usas validaciones HTTP o redirecciones controladas. No desactives todo el firewall sin anotar qué regla cambias.

El problema es renovación de Let's Encrypt

Si el certificado del origen caducó o certbot no renueva, el 525 puede ser un síntoma de fondo. Sigue Let's Encrypt no renueva para revisar certbot renew --dry-run, puerto 80, DNS-01 y timers systemd. Para una caducidad vista por el navegador sin Cloudflare, usa certificado SSL caducado.

Cuándo escalar

Escala con el formulario en categoría Web o despliegue si no tienes acceso al origen, si Full strict falla aunque el certificado parezca correcto, si el proveedor bloquea rangos de Cloudflare o si los logs TLS no son claros. Adjunta la checklist, capturas de SSL/TLS en Cloudflare, salida de openssl sin claves privadas y cambios recientes.

Enlaces relacionados: Certificado SSL caducado, Error 522 Cloudflare, La web no carga, Demasiadas redirecciones, Let's Encrypt no renueva.

¿Sigues atascado después de la checklist?

Escribir el problema Volver al triage