Problem z wystawianiem certyfikatów spowodowany konfliktem CNAME i TXT
Categories:
CNAME i TXT o tym samym prefiksie nie mogą współistnieć
Osoby zajmujące się domenami mogą wiedzieć, że rekordy (A,AAAA) nie mogą współistnieć z CNAME, ale być może nie napotkały przypadku konfliktu TXT z CNAME.
W jakiej sytuacji TXT i CNAME mogą być użyte jednocześnie z tym samym prefiksem?
Jednym z takich przypadków jest wystawianie certyfikatu LetsEncrypt z wykorzystaniem wyzwania DNS-01 w celu weryfikacji własności domeny.
- Certbot tworzy rekord TXT
_acme-challenge.example.comprzy użyciu ackey i acsecret lub tokenu. - Letsencrypt wyszukuje rekord TXT, aby potwierdzić, że osoba występująca ma prawo do tworzenia rekordów DNS, co dowodzi własności domeny.
- Letsencrypt wystawia certyfikat.
- Certbot czyści rekord TXT
_acme-challenge.example.com.
Jeśli podczas tworzenia rekordu TXT istnieje już rekord CNAME _acme-challenge.example.com, rekord TXT może zostać utworzony niepowodzeniem, co spowoduje niepowodzenie weryfikacji wyzwania domeny.
Dlaczego pojawia się rekord CNAME _acme-challenge.example.com?
Nowa usługa Alibaba Cloud ESA (Edge Security Acceleration) działa podobnie do Cloudflare, jest rozszerzoną wersją wcześniejszego usługi DCDN (Full Site Acceleration). Wczesne wersje nie wspierały samodzielnej rejestracji domen wieloznacznych, dlatego używam skryptu do cyklicznego przesyłania własnych certyfikatów wieloznacznych, co jest nieco uciążliwe. Później wprowadzono funkcję “zarządzania DCV”, umożliwiającą samodzielne wystawianie i odnawianie certyfikatów wieloznacznych. Po wykonaniu zgodnie z instrukcjami rzeczywiście można samodzielnie zarządzać certyfikatami wieloznacznych. Jednak niewielki problem został odkryty dopiero po kilku miesiącach. Ten rekord CNAME stale istnieje i uniemożliwia utworzenie rekordu TXT o tym samym prefiksie, co powoduje, że nie mogę udowodnić własności domeny w innych miejscach.

Rozwiązania
Rozwiązanie 1: Nie używaj zarządzania DCV
Zarządzanie DCV wymaga wprowadzenia określonej wartości dla _acme-challenge.example.com, co oznacza, że domena należy do strony trzeciej, a ty tracisz kontrolę nad tą domeną.
Jeśli potrzebujesz domeny wieloznacznej, możesz użyć skryptu zadania do okresowego przesyłania certyfikatów wieloznacznych na ESA za pomocą API ESA.
Rozwiązanie 2: Nie używaj DNS-01 do weryfikacji własności domeny
Certbot oferuje kilka metod weryfikacji własności domeny (challenge, wyzwanie). Oprócz weryfikacji domeny głównej (DNS-01) można również użyć metod HTTP-01 i TLS-ALPN-01.
Metody HTTP-01 i TLS-ALPN-01 wymagają najpierw posiadania usługi i weryfikacji jej dostępności przed wystawieniem certyfikatu.
DNS-01 umożliwia uzyskanie certyfikatu przed zbudowaniem usługi.
Rozwiązanie 3: Przełamanie bariery między ESA i DNS Cloud Resolver
Obie te usługi należą do Alibaba Cloud, ale każda z nich ma własną implementację API DNS. Jeśli ESA mogłoby samodzielnie ustawić rekordy CNAME lub TXT w Cloud DNS i usunąć je po uzyskaniu certyfikatu, to nie wpłynęłoby to na możliwość używania wyzwania DNS-01 w innych miejscach.
Rozwiązanie 4: Nie używaj ESA Alibaba
Na Cloudflare nie ma takiego problemu, certyfikaty są dostępne swobodnie.