Module 5 · 5.2
CAA: wie mag certificaten uitgeven?
Module 5: Overige records · Leestijd: 6 minuten
Leerdoel: Na deze les kun je een CAA-record lezen en weet je hoe een CAA-record het aanvragen van een SSL-certificaat kan blokkeren.
Kernbegrippen: CAA, issue, issuewild, iodef, certificaatautoriteit (CA), geen CAA-record betekent: iedereen mag
Een slotje van een vreemde
Een SSL-certificaat (eigenlijk een TLS-certificaat) zorgt voor het slotje in de browser. Het wordt uitgegeven door een certificaatautoriteit, kortweg CA: bijvoorbeeld Let's Encrypt, Sectigo, DigiCert of Google Trust Services. Er zijn tientallen CA's die browsers vertrouwen, en in principe mag elk van hen een certificaat voor jouw domein uitgeven, zolang de aanvrager laat zien dat hij het domein beheert.
Met een CAA-record (Certification Authority Authorization, RFC 8659) beperk je dat. Je zet in de DNS welke CA's voor jouw domein certificaten mogen uitgeven. Elke CA is verplicht dat record te controleren voordat hij een certificaat uitgeeft. Staat de CA er niet in, dan moet hij weigeren.
Dat beschermt tegen een certificaat dat via een slordige of misleide CA op jouw naam wordt uitgegeven. Het is een extra slot, geen verplichting.
Hoe een CAA-record eruitziet
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
example.com. 3600 IN CAA 0 issue "sectigo.com"
example.com. 3600 IN CAA 0 iodef "mailto:beveiliging@example.com"Een CAA-record heeft drie delen:
| Deel | Voorbeeld | Betekent |
|---|---|---|
| Vlag | 0 | Bijna altijd 0. Een 128 betekent: "begrijp je deze regel niet, geef dan niets uit". |
| Tag | issue | Wat voor regel het is (zie hieronder). |
| Waarde | "letsencrypt.org" | De CA, aangeduid met zijn eigen domeinnaam. Tussen aanhalingstekens. |
De drie tags die je tegenkomt:
issue: deze CA mag gewone certificaten uitgeven (voorexample.com,www.example.comenzovoort).issuewild: deze CA mag wildcardcertificaten uitgeven (*.example.com). Staat er geenissuewild, dan gelden voor wildcards deissue-regels.iodef: waar een CA een melding kan sturen als iemand een certificaat aanvraagt dat volgens jouw CAA niet mag.
Je mag meerdere issue-regels hebben: elke genoemde CA mag dan. Wil je juist dat niemand een bepaald soort certificaat uitgeeft, dan gebruik je een lege waarde: 0 issuewild ";" betekent "niemand mag wildcards uitgeven".
Geen CAA-record: iedereen mag
Heeft je domein geen CAA-record, dan mag elke CA een certificaat uitgeven. Dat is de normale situatie voor de meeste domeinen, en het is niet fout. CAA is een keuze.
Een CA zoekt het CAA-record op bij de exacte naam van het certificaat. Vindt hij daar niets, dan kijkt hij een niveau hoger, tot aan het domein. Een CAA-record op example.com geldt dus ook voor shop.example.com, tenzij shop.example.com een eigen CAA-record heeft.
Hoe CAA je certificaat kan blokkeren
Dit is de reden dat CAA in een beginnerscursus thuishoort: een CAA-record kan ervoor zorgen dat je gratis certificaat niet meer vernieuwd wordt, en de foutmelding is niet altijd duidelijk.
Stel: je website draaide jaren met een certificaat van een betaalde CA. Iemand heeft toen een CAA-record gemaakt:
example.com. CAA 0 issue "sectigo.com"Nu verhuis je naar hosting die automatisch Let's Encrypt-certificaten aanvraagt. Let's Encrypt controleert CAA, ziet dat alleen Sectigo mag, en weigert. Je site krijgt geen certificaat en bezoekers zien een waarschuwing.
De oplossing: voeg de CA toe die je nu gebruikt, of verwijder het oude CAA-record als je het niet meer nodig hebt.
example.com. CAA 0 issue "sectigo.com"
example.com. CAA 0 issue "letsencrypt.org"Gebruik je een dienst die zelf certificaten regelt, zoals een webwinkelplatform of een CDN, vraag dan na welke CA die gebruikt en zet die erbij. Anders blokkeer je hun certificaat ook.
In de praktijk: zo ziet het eruit in een paneel
Als voorbeeld gebruiken we het DNS-scherm van Mijn WebOké, dat een CAA-hulp heeft met de bekendste CA's. In DirectAdmin, Cloudflare en de meeste andere panelen vul je dezelfde drie velden in: vlag, tag en waarde.
- Klik op Record toevoegen en kies CAA.
- Laat de naam op het domein zelf staan (
@). - Laat de vlag op
0. - Kies de tag
issue. - Vul de CA in, bijvoorbeeld
letsencrypt.org. - Sla op en herhaal voor elke CA die mag uitgeven.
Samenvatting
- Met een CAA-record bepaal je welke certificaatautoriteiten certificaten voor je domein mogen uitgeven.
issueis voor gewone certificaten,issuewildvoor wildcards,iodefvoor meldingen.- Geen CAA-record betekent: elke CA mag. Dat is normaal.
- Een CAA-record op het domein geldt ook voor subdomeinen zonder eigen CAA.
- Een vergeten CAA-record kan een nieuw of vernieuwd certificaat blokkeren. Zet de CA die je nu gebruikt erbij.
Quiz
Opdracht
Opdracht Z5.2: CAA opzoeken. Zoek de CAA-records van wikipedia.org op. Welke certificaatautoriteiten mogen volgens de issue-regels certificaten uitgeven? Vul ze allemaal in.
Opdracht O5.2: Zelf instellen in je oefenzone. Maak in je oefenzone op de naam van de zone zelf (@) twee CAA-records:
0 issue ";"0 iodef "mailto:abuse@dnspractice.eu"
De eerste regel betekent: niemand mag certificaten uitgeven voor deze naam. In de oefenzone is dat precies goed: er draait geen echte website, dus er hoort ook geen certificaat te komen, en zo kan niemand de oefenzone misbruiken om een certificaat te krijgen. Bij je echte domein doe je dit nooit als je https gebruikt; daar zet je de CA's die je wél gebruikt, zoals 0 issue "letsencrypt.org". De iodef-regel wijst in de oefenzone naar het meldadres van de oefenomgeving; bij je echte domein vul je je eigen adres in.
Klik daarna op Controleren.
Opdracht O5.2
Deze opdracht doe je in je eigen oefenzone: een echte DNS-zone op de nameservers van WebOké, alleen voor jou. Meld je aan met je e-mailadres. Je krijgt een inloglink per mail en komt daarna terug op deze les. We gebruiken je adres alleen voor de cursus.
Verder lezen
Deze artikelen beschrijven de stappen in de panelen van WebOké; in andere panelen werken ze vergelijkbaar.
