Problema de certificado por conflicto entre CNAME y TXT

CNAME y TXT con el mismo prefijo no pueden coexistir

Aquellos que han trabajado con dominios probablemente saben que los registros (A, AAAA) no pueden coexistir con CNAME, pero quizás no hayan encontrado el conflicto entre TXT y CNAME.

¿En qué situaciones se usaría TXT y CNAME simultáneamente con el mismo prefijo?

Un escenario es durante la solicitud de certificados en LetsEncrypt, al usar el desafío DNS-01 para validar la propiedad del dominio.

  1. Certbot creará un registro TXT en _acme-challenge.example.com usando ackey y acsecret o token
  2. Letsencrypt consultará el registro TXT para confirmar que el solicitante tiene autoridad para crear registros DNS, demostrando así la propiedad del dominio
  3. Letsencrypt emite el certificado
  4. Certbot elimina el registro TXT en _acme-challenge.example.com

Si al crear el registro TXT ya existe un registro CNAME en _acme-challenge.example.com, el registro TXT podría fallar al crearse, causando el fracaso de la validación de desafío del dominio.

¿Por qué aparecería un registro CNAME en _acme-challenge.example.com?

ESA (Edge Security Acceleration) de Alibaba Cloud, similar a Cloudflare, es una versión mejorada del antiguo DCDN. En sus inicios, no permitía solicitar dominios comodín de forma autónoma, así que usaba scripts para subir periódicamente certificados comodín que yo mismo solicitaba, lo que resultaba algo incómodo de gestionar. Más tarde introdujeron DCV gestionado, permitiendo solicitar y actualizar certificados comodín de forma autónoma. Siguiendo las instrucciones, efectivamente se puede gestionar certificados comodín, pero se creó un problema que no se descubrió hasta meses después. Este registro CNAME persistente impediría crear registros TXT con el mismo prefijo, evitando que pueda probar la propiedad del dominio en otros lugares.

Soluciones

Solución 1: No usar DCV gestionado

El DCV gestionado requiere que _acme-challenge.example.com tenga un valor específico, declarando esencialmente que el dominio pertenece a terceros, perdiendo así el control sobre ese dominio.

Para dominios comodín, se puede usar un script de tareas que llame a la API de ESA para subir periódicamente certificados comodín a ESA.

Solución 2: No usar DNS-01 para validar la propiedad del dominio

Certbot ofrece varios métodos de validación de propiedad de dominio (challenge, desafío), además de DNS-01 para dominios raíz, también se pueden usar métodos como HTTP-01 y TLS-ALPN-01.

Los métodos HTTP-01 y TLS-ALPN-01 requieren tener un servicio previo para validar la accesibilidad antes de emitir el certificado.

DNS-01 permite obtener el certificado antes de montar el servicio.

Solución 3: Romper la barrera entre ESA y DNS de Cloud Resolver

Ambos servicios pertenecen a Alibaba Cloud, pero cada uno implementa su propia API DNS. Si ESA pudiera gestionar de forma autónoma registros CNAME o TXT en Cloud Resolver DNS, obteniendo el certificado y luego eliminando los registros, no afectaría el uso del desafío DNS-01 en otros lugares.

Solución 4: No usar ESA de Alibaba

En Cloudflare no hay este problema, los certificados se otorgan libremente.