Zertifikatsanfrage-Probleme durch Konflikt zwischen CNAME und TXT
Categories:
CNAME und TXT mit gleichem Präfix können nicht gleichzeitig existieren
Jemand, der sich mit Domain-Namen beschäftigt hat, weiß möglicherweise, dass (A, AAAA)-Einträge nicht gleichzeitig mit CNAME existieren können, hat aber möglicherweise noch nicht erlebt, dass TXT mit CNAME in Konflikt steht.
In welchen Fällen werden TXT und CNAME gleichzeitig mit demselben Präfix verwendet?
Ein Szenario ist die Zertifikatsanforderung bei LetsEncrypt, bei der die DNS-01-Challenge zur Überprüfung des Domain-Besitzes verwendet wird.
- Certbot erstellt mithilfe von ackey und acsecret oder eines Tokens einen TXT-Eintrag für
_acme-challenge.example.com. - Letsencrypt fragt den TXT-Eintrag ab, um zu bestätigen, dass der Antragsteller berechtigt ist, DNS-Einträge zu erstellen und damit den Domain-Besitz nachzuweisen.
- Letsencrypt stellt das Zertifikat aus.
- Certbot bereinigt den TXT-Eintrag für
_acme-challenge.example.com.
Wenn beim Erstellen des TXT-Eintrags bereits ein CNAME-Eintrag für _acme-challenge.example.com existiert, kann der TXT-Eintrag möglicherweise nicht erstellt werden, was zu einem Fehlschlag bei der Domain-Challenge-Überprüfung führt.
Warum tritt ein CNAME-Eintrag für _acme-challenge.example.com auf?
Die neu eingeführte ESA-Edge Security Acceleration von Alibaba Cloud ähnelt Cloudflare und ist eine verbesserte Version des ursprünglichen DCDN Full-Station Acceleration. In der frühen Nutzung unterstützte sie keine selbstbedienbare Anforderung von Wildcard-Domains; ich verwendete ein Skript, um Wildcard-Zertifikate periodisch hochzuladen, was die Verwaltung etwas umständlich machte. Später wurde DCV-Hosting eingeführt, das die selbstbedienbare Anforderung und Aktualisierung von Wildcard-Domains ermöglicht. Nach der Anleitung kann das Wildcard-Zertifikat tatsächlich selbst verwaltet werden. Doch die versteckten Gefahren wurden erst Monate später entdeckt. Dieser CNAME-Eintrag bleibt bestehen und verhindert die Erstellung von TXT-Einträgen mit demselben Präfix, wodurch ich nicht mehr in der Lage bin, den Domain-Besitz an anderer Stelle zu beweisen.

Lösungsansätze
Lösung 1: Kein托管 DCV verwenden
托管 DCV erfordert, dass _acme-challenge.example.com mit einem bestimmten Wert geschrieben wird, was im Wesentlichen erklärt, dass die Domain dritten gehört und man selbst nicht mehr die Kontrolle über die Domain besitzt.
Für Wildcard-Domains kann ein Aufgaben-Skript die ESA-API aufrufen, um Wildcard-Zertifikate periodisch auf ESA hochzuladen.
Lösung 2: Keine DNS-01-Überprüfung der Domain-Besitzrechte verwenden
Certbot bietet verschiedene Methoden zur Überprüfung der Domain-Besitzrechte (Challenge), neben der Root-Domain-Überprüfung (DNS-01) gibt es auch HTTP-01 und TLS-ALPN-01 usw.
Die Methoden HTTP-01 und TLS-ALPN-01 erfordern zuerst einen Dienst, nach dessen Erreichbarkeit überprüft wird, bevor das Zertifikat ausgestellt wird.
DNS-01 kann das Zertifikat bereits vor dem Aufbau des Dienstes erhalten.
Lösung 3: Die Geschäftsgrenze zwischen ESA und Cloud DNS auflösen
Beide Dienste gehören zu Alibaba Cloud, implementieren jedoch jeweils eine eigene DNS-API. Wenn ESA selbstständig CNAME- oder TXT-Einträge in Cloud DNS einrichten könnte, nachdem das Zertifikat erhalten wurde, die Einträge löschen würde, wäre dies nicht beeinträchtigend für die Verwendung der DNS-01-Challenge an anderer Stelle.
Lösung 4: Kein Alibaba ESA verwenden
Bei Cloudflare gibt es kein solches Problem, Zertifikate werden nach Belieben ausgestellt.