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:

 
http://tudominio/.well-known/acme-challenge/...
 

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:

 
_acme-challenge.tudominio
 

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.