Проблема с получением сертификата из-за конфликта CNAME и TXT

CNAME и TXT с одинаковым префиксом не могут сосуществовать

Те, кто сталкивался с доменами, возможно, знают, что записи (A, AAAA) не могут сосуществовать с CNAME, но вряд ли сталкивались с конфликтом TXT и CNAME.

В каких случаях TXT и CNAME могут использовать один и тот же префикс одновременно?

Один из сценариев - это получение сертификата LetsEncrypt с использованием вызова DNS-01 для подтверждения права собственности на домен.

  1. Certbot использует ackey и acsecret или токен для создания записи TXT _acme-challenge.example.com
  2. Letsencrypt запрашивает TXT запись, чтобы подтвердить, что заявитель имеет право создавать DNS-записи, доказывая право собственности на домен.
  3. Letsencrypt выдает сертификат
  4. Certbot удаляет запись TXT _acme-challenge.example.com

Если при создании записи TXT уже существует запись CNAME _acme-challenge.example.com, запись TXT может не создаться, что приведет к сбою проверки домена.

Почему может появиться запись CNAME _acme-challenge.example.com?

Недавно Alibaba Cloud представила ESA (Edge Security Acceleration), похожую на Cloudflare, это улучшенная версия прежнего DCDN (全站加速). Раньше она не поддерживала самостоятельное получение поддоменов, поэтому я использовал скрипт для периодической загрузки своих поддоменных сертификатов, что было немного неудобно. Позже появилась функция управляемого DCV, позволяющая самостоятельно получать и обновлять поддоменные сертификаты. Следуя инструкциям, действительно можно управлять поддоменными сертификатами самостоятельно. Однако спустя несколько месяцев я обнаружил скрытую проблему. Эта запись CNAME продолжает существовать, что может помешать созданию записи TXT с тем же префиксом, в результате чего я не смогу подтвердить право собственности на домен в другом месте.

Решения

Решение 1: Не использовать управляемый DVC

Для управляемого DVC требуется записать _acme-challenge.example.com с указанным значением, что по сути означает передачу домена третьей стороне, и вы больше не имеете контроль над этим доменом.

Для получения поддомена можно использовать скрипт для периодической загрузки поддоменного сертификата на ESA через API.

Решение 2: Не использовать DNS-01 для подтверждения права собственности на домен

Certbot предоставляет несколько методов подтверждения права собственности на домен (вызовы, challenge), кроме проверки корневого домена (DNS-01), также можно использовать HTTP-01 и TLS-ALPN-01.

Методы HTTP-01 и TLS-ALPN-01 требуют наличия сервиса, подтверждения доступности, а затем получения сертификата.

DNS-01 позволяет получить сертификат до настройки сервиса.

Решение 3: Разрушить барьер между ESA и DNS облачного разрешения

Оба сервиса принадлежат Alibaba Cloud, но каждый реализует свой API DNS. Если ESA сможет самостоятельно настраивать CNAME или TXT записи в DNS облачного разрешения, получать сертификат, а затем удалять записи, это не повлияет на использование DNS-01 в другом месте.

Решение 4: Не использовать Alibaba ESA

На Cloudflare таких проблем нет, сертификаты выдаются без проблем.