Problemen met certificaataanvraag door CNAME/TXT-conflict
Categories:
CNAME en TXT met dezelfde voorvoegsel kunnen niet samenbestaan
Wie al eens met domeinnamen heeft gewerkt, weet dat A- en AAAA-records niet kunnen samenbestaan met CNAME-records, maar misschien heeft niet iedereen ooit te maken gehad met conflicten tussen TXT en CNAME.
In welke situatie kunnen TXT en CNAME tegelijkertijd hetzelfde voorvoegsel gebruiken?
Een scenario is het aanvragen van een LetsEncrypt-certificaat met de DNS-01-challenge om de domeineigendom te verifiëren.
- Certbot gebruikt een ackey en acsecret of een token om een TXT-record te maken voor
_acme-challenge.example.com - Letsencrypt zoekt de TXT-record op om te bevestigen dat de aanvrager bevoegd is DNS-records te maken, wat bewijst dat hij/zij de domeineigendom bezit.
- Letsencrypt verstrekt het certificaat
- Certbot ruimt de TXT-record voor
_acme-challenge.example.comop
Als er al een CNAME-record bestaat voor _acme-challenge.example.com op het moment dat de TXT-record moet worden aangemaakt, kan het aanmaken van de TXT-record mislukken, wat leidt tot een mislukte domeinverificatie.
Waarom zou er een CNAME-record bestaan voor _acme-challenge.example.com?
ESA, de nieuwgeïntroduceerde Edge Security Acceleration van Alibaba Cloud, vergelijkbaar met Cloudflare, is een verbeterde versie van de vroegere DCDN full-site acceleration. In de vroege fase werd geen zelfbedieningsondersteuning voor jokertekendomeinen aangeboden. Ik gebruikte een script om periodiek mijn zelf aangevraagde jokertekendomeincertificaat te uploaden, wat enigszins onhandig was. Later werd “Managed DCV” geïntroduceerd, waarmee jokertekendomeincertificaten zelfstandig kunnen worden aangevraagd en bijgewerkt. Volgens de handleiding kan het jokertekendomeincertificaat inderdaad zelfstandig worden beheerd. Maar de latere gevonden risico’s bleven maandenlang sluimeren. Deze CNAME-records blijven bestaan, wat voorkomt dat TXT-records met hetzelfde voorvoegsel worden aangemaakt, waardoor ik niet kan aantonen dat ik de domeineigenaar ben op andere plaatsen.

Oplossingen
Oplossing 1: Geen gebruik maken van Managed DCV
Managed DCV vereist dat _acme-challenge.example.com een specifieke waarde krijgt, wat in feite betekent dat het domein wordt overgedragen aan een derde partij en dat je de controle over het domein niet langer hebt.
Voor jokertekendomeinen kun je een taakscript gebruiken dat de ESA API aanroept om het jokertekendomeincertificaat periodiek te uploaden naar ESA.
Oplossing 2: Geen gebruik maken van DNS-01 om domeineigendom te verifiëren
Certbot biedt verschillende methoden om domeineigendom te verifiëren (challenge, challenge), naast de rootdomeinverificatie (DNS-01) zijn er ook methoden zoals HTTP-01 en TLS-ALPN-01.
HTTP-01 en TLS-ALPN-01 vereisen eerst een actieve service, en pas nadat de toegankelijkheid is geverifieerd, wordt het certificaat verstrekt.
DNS-01 kan het certificaat verkrijgen voordat de service is opgezet.
Oplossing 3: De zakelijke barrière tussen ESA en Cloud DNS doorbreken
Deze twee diensten behoren beide tot Alibaba Cloud, maar elk heeft zijn eigen DNS API geïmplementeerd. Als ESA zelfstandig CNAME- of TXT-records kan instellen in Cloud DNS en deze na het verkrijgen van het certificaat weer kan verwijderen, dan zou dit geen invloed hebben op het gebruik van DNS-01-challenges op andere plaatsen.
Oplossing 4: Geen gebruik maken van Alibaba ESA
Dit probleem bestaat niet bij Cloudflare, daar zijn certificaten gemakkelijk verkrijgbaar.