Cloudflare DNS + TLS

Configuración de DNS y certificados SSL

Overview

Cloudflare gestiona el DNS para todos los dominios *.illanes00.cl y proporciona certificados SSL via DNS-01 challenge.

Configuración DNS-01

Caddy usa la API de Cloudflare para obtener certificados automáticamente sin necesidad de exponer el puerto 80.

Token de API

Ubicación: ~/.cloudflare/token o variable CLOUDFLARE_API_TOKEN

Permisos requeridos: - Zone:DNS:Edit (para el dominio illanes00.cl)

En Caddy

El snippet global de TLS está en /etc/caddy/Caddyfile:

{
    acme_dns cloudflare {
        api_token {env.CLOUDFLARE_API_TOKEN}
    }
}

Cada vhost usa:

mi-proyecto.illanes00.cl {
    import tls_cf
    reverse_proxy localhost:8105
}

Verificar Certificados

# Ver detalles del certificado
curl -vI https://proyecto.illanes00.cl 2>&1 | grep -E "subject|expire|issuer"

# Ver certificado completo
openssl s_client -connect proyecto.illanes00.cl:443 -servername proyecto.illanes00.cl </dev/null 2>/dev/null | openssl x509 -text

# Ver fecha de expiración
echo | openssl s_client -connect proyecto.illanes00.cl:443 -servername proyecto.illanes00.cl 2>/dev/null | openssl x509 -noout -dates

Renovación

Los certificados se renuevan automáticamente por Caddy (30 días antes de expirar).

Para forzar renovación:

# Eliminar certificado actual
sudo rm /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/proyecto.illanes00.cl/

# Recargar Caddy
sudo systemctl reload caddy

Troubleshooting

Error “DNS problem: SERVFAIL”

El token de Cloudflare no tiene permisos correctos o expiró.

# Verificar token
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
  -H "Authorization: Bearer $(cat ~/.cloudflare/token)" \
  -H "Content-Type: application/json"

Error “rate limited”

Let’s Encrypt tiene límites. Esperar 1 hora o usar staging:

{
    acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}