Configurar certificados SSL automáticos con herramientas como Caddy, Nginx o Apache HTTP Server suele ser un proceso sencillo. Sin embargo, cuando se introduce un proxy como Cloudflare, empiezan a aparecer problemas, especialmente en la emisión y renovación automática de certificados.
Este artículo explica por qué ocurre esto, qué diferencias hay entre los métodos de validación y cómo diseñar una configuración que funcione en todos los casos.
Cómo funcionan los certificados automáticos
Las autoridades certificadoras como Let's Encrypt utilizan el protocolo ACME para validar que controlas un dominio antes de emitir un certificado.
Existen varios métodos, pero los dos más relevantes son:
- HTTP-01
- DNS-01
La elección entre uno u otro determina si el sistema funcionará correctamente o no en presencia de proxies.
Validación HTTP-01
Este método consiste en que el servidor web responda a una petición HTTP en una ruta específica:
La autoridad certificadora accede a esa URL y comprueba que la respuesta es correcta.
Cuándo funciona
- El dominio apunta directamente al servidor
- No hay proxies intermediarios
- El puerto 80 está accesible desde Internet
Cuándo falla
- Existe un proxy como Cloudflare en modo activo
- El tráfico no llega directamente al servidor
- Firewalls o configuraciones de red bloquean la petición
Validación DNS-01
Este método requiere crear un registro TXT en el DNS del dominio:
La autoridad certificadora consulta ese registro para validar el control del dominio.
Cuándo funciona
- Se tiene acceso al DNS del dominio
- El proveedor DNS dispone de API (como Cloudflare)
- Se necesitan certificados wildcard
Cuándo falla
- No se tiene control sobre el DNS
- El dominio está gestionado por un tercero sin acceso API
El impacto de Cloudflare
El comportamiento cambia completamente dependiendo de cómo esté configurado Cloudflare.
Modo DNS only
Cloudflare actúa únicamente como proveedor DNS. El tráfico va directamente al servidor.
En este caso:
- HTTP-01 funciona correctamente
- No hay interferencias en la validación
Modo proxy activo
Cloudflare intercepta el tráfico HTTP y HTTPS antes de que llegue al servidor.
Esto implica:
- HTTP-01 deja de funcionar en la mayoría de casos
- El servidor no recibe directamente la petición de validación
En este escenario, la única opción fiable es DNS-01, siempre que se tenga acceso al DNS.
Comparativa de escenarios
| Escenario | HTTP-01 | DNS-01 | Resultado |
|---|---|---|---|
| Dominio sin Cloudflare | Funciona | No disponible | Correcto |
| Cloudflare (cuenta propia) | No funciona | Funciona | Correcto |
| Cloudflare (cuenta externa sin acceso) | No funciona | No funciona | Error |
| Cloudflare en modo DNS only | Funciona | No necesario | Correcto |
El caso crítico en entornos multi-cliente
El problema más frecuente aparece en sistemas donde los clientes gestionan sus propios dominios.
Escenario típico:
- El cliente usa su propia cuenta de Cloudflare
- Activa el proxy (modo naranja)
- Apunta el dominio a tu servidor
Consecuencias:
- HTTP-01 no funciona porque Cloudflare intercepta el tráfico
- DNS-01 no funciona porque no tienes acceso al DNS
- No es posible emitir ni renovar certificados automáticamente
Este es el único caso donde una configuración estándar falla por completo.
Soluciones posibles
Acceso al DNS del cliente
La solución más robusta consiste en que el cliente proporcione un token de API de Cloudflare. Esto permite usar DNS-01 de forma automática.
Desactivar el proxy
El cliente puede cambiar el dominio a modo DNS only. Esto permite que HTTP-01 funcione sin problemas.
Certificados de origen de Cloudflare
Cloudflare permite generar certificados para instalar directamente en el servidor. Es una solución válida, pero requiere gestión manual y no utiliza ACME estándar.
Modo SSL Flexible
Cloudflare se conecta al servidor mediante HTTP en lugar de HTTPS. No se recomienda porque elimina el cifrado entre Cloudflare y el origen.
Aplicación a Caddy, Nginx y Apache
Este comportamiento no es específico de un servidor.
- Caddy automatiza mejor el proceso, pero depende de los mismos challenges
- Nginx (con Certbot u otros clientes ACME) se comporta igual
- Apache HTTP Server también depende de HTTP-01 o DNS-01
La diferencia está en la automatización, no en la limitación técnica.
Arquitectura recomendada
Para sistemas que gestionan múltiples dominios (SaaS, plataformas, paneles), la mejor estrategia es:
- Usar DNS-01 para dominios bajo tu control
- Usar HTTP-01 como fallback para dominios externos
Esto permite cubrir la mayoría de casos sin intervención manual.
Conclusión
El éxito en la emisión automática de certificados no depende únicamente del servidor, sino de la relación entre DNS, proxy y método de validación.
- HTTP-01 requiere acceso directo al servidor
- DNS-01 requiere control del DNS
- Cloudflare en modo proxy rompe HTTP-01
- El único escenario realmente problemático es cuando no tienes control ni del tráfico ni del DNS
Entender estos principios permite diseñar sistemas robustos y evitar fallos en producción.