Module 4 · 4.3
DKIM in de praktijk: selectors, sleutels en diensten
Module 4: Afleverbaarheid: SPF, DKIM en DMARC in de praktijk · Leestijd: 12 minuten
Leerdoel: Na deze les kun je een DKIM-Signature-kopregel ontleden, voor elke verzenddienst DKIM met je eigen domein instellen, controleren of een selector werkt, en uitleggen hoe je sleutels veilig vervangt.
Kernbegrippen: DKIM-Signature, d= (tekenend domein), s= (selector), h= (ondertekende kopregels), bh= en b=, canonicalisatie (c=), <selector>._domainkey.<domein>, TXT met p= of CNAME naar de dienst, sleutellengte 2048 bit (RFC 8301), stukken van 255 tekens, ed25519 (RFC 8463), sleutelwissel, lege p= (ingetrokken), DKIM en doorsturen
Waarom DKIM het belangrijkste van de drie is
SPF zegt welke servers mogen mailen, maar breekt bij doorsturen en kijkt naar het Return-Path, dat bij veel diensten niet van jou is. DKIM zet een handtekening in de mail zelf. Die handtekening overleeft doorsturen (zolang de mail niet wordt veranderd) en is gekoppeld aan een domein dat jij kiest. Daardoor is DKIM in de praktijk vaak het enige dat DMARC laat slagen voor nieuwsbrieven, facturen uit een boekhoudprogramma en doorgestuurde mail.
De basis (hoe de sleutel in de DNS staat, wat een selector is) staat in de DNS-cursus, les 4.4. Hier gaan we verder: wat staat er precies in een handtekening, en hoe regel je DKIM voor elke dienst?
Een handtekening ontleden
Open de kopregels van een mail die je hebt ontvangen (les 1.5). Bovenaan staat, als de mail getekend is, iets als:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=x;
t=1762588800; h=from:to:subject:date:message-id:mime-version:content-type;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Gm7yW3q...lange reeks tekens...Qx9A==| Tag | Betekenis |
|---|---|
v=1 | DKIM-versie |
a=rsa-sha256 | Algoritme: RSA-sleutel, SHA-256. Ook mogelijk: ed25519-sha256 |
c=relaxed/relaxed | Canonicalisatie: hoe streng kleine wijzigingen (spaties, hoofdletters in kopregelnamen) worden behandeld, voor de kopregels en de tekst. relaxed is gebruikelijk en vergevingsgezinder dan simple |
d=example.com | Het tekenende domein. Dit domein staat in voor de mail. DMARC vergelijkt dit met het Van-adres |
s=x | De selector: welke sleutel van dat domein is gebruikt |
t= | Tijdstip van ondertekenen (seconden sinds 1970) |
h= | Welke kopregels zijn ondertekend. from moet er altijd in staan |
bh= | Een vingerafdruk (hash) van de tekst van de mail |
b= | De handtekening zelf |
De ontvanger haalt de publieke sleutel op bij <s>._domainkey.<d>, hier dus x._domainkey.example.com, en controleert of b= past bij de kopregels uit h= en de vingerafdruk bh=. Is er onderweg één letter in de tekst of in een ondertekende kopregel veranderd, dan faalt de controle.
In Authentication-Results zie je de uitkomst, bijvoorbeeld dkim=pass header.d=example.com header.s=x. Een mail kan meerdere handtekeningen hebben, bijvoorbeeld een van jouw domein en een van de dienst zelf. Voor DMARC telt alleen een handtekening waarvan d= bij jouw Van-domein hoort.
Elke dienst zijn eigen selector
Een domein kan veel DKIM-sleutels tegelijk hebben, elk onder een eigen selector. Dat is precies de bedoeling: elke dienst die namens jou mailt, tekent met een eigen sleutel.
| Verzender | Selector (voorbeeld) | Hoe het in de DNS staat |
|---|---|---|
| Hostingmailserver | x of default | TXT met de sleutel, door het paneel aangemaakt |
| Microsoft 365 | selector1, selector2 | twee CNAME-records naar Microsoft |
| Google Workspace | google (standaard) | TXT met een sleutel die je in de beheerconsole laat maken |
| Nieuwsbriefdienst | bijvoorbeeld k2, k3, mte1 | meestal CNAME-records naar de dienst |
TXT of CNAME?
- Bij een TXT-record zet je zelf de publieke sleutel in je DNS. Wil de dienst een nieuwe sleutel, dan moet jij het record aanpassen.
- Bij een CNAME-record wijs je de selector door naar een naam bij de dienst, bijvoorbeeld
k2._domainkey.example.com CNAME dkim2.mailer.example.De dienst beheert de sleutel dan zelf en kan hem vervangen zonder dat jij iets hoeft te doen. Daarom kiezen grote diensten voor CNAME, en gebruiken ze er vaak twee: zo kunnen ze wisselen tussen een actieve en een nieuwe sleutel.
Let op: een CNAME mag niet naast een ander record op dezelfde naam staan. Staat er al een TXT op selector1._domainkey, haal die dan weg.
Het belangrijkste: DKIM aanzetten bij de dienst
Bij veel diensten is DKIM met je eigen domein niet standaard aan. Ze tekenen dan met hun eigen domein (d=mailer.example). De mail is dan wel getekend, maar niet uitgelijnd met jouw Van-adres. Voor DMARC telt dat niet. In het beheer van de dienst heet het vaak "domein verifiëren", "domeinverificatie", "authenticatie" of "eigen afzenderdomein". Pas als je de records hebt gezet én het in de dienst hebt aangezet, tekent hij met d=example.com.
Sleutels: lengte, stukken en algoritme
- Lengte. RFC 8301 zegt: minstens 1024 bit, en verzenders horen minstens 2048 bit te gebruiken. Gebruik 2048. Een sleutel van 512 bit wordt door ontvangers als ongeldig gezien.
- Stukken van 255 tekens. Een TXT-record bestaat uit tekenreeksen van maximaal 255 tekens. Een 2048-bit-sleutel is ongeveer 400 tekens en past daar niet in één reeks. Het record bestaat dan uit twee of meer reeksen achter elkaar (
"v=DKIM1; k=rsa; p=MIIBIj..." "...IDAQAB"), die de ontvanger aan elkaar plakt. De meeste panelen doen dat automatisch. Gaat het mis, dan krijg je een afgekapte sleutel en faalt elke handtekening. Kopieer een sleutel dus altijd in zijn geheel, zonder extra spaties of aanhalingstekens in het midden. - ed25519 (RFC 8463) is een moderner algoritme met korte sleutels. Nog niet alle ontvangers controleren het. Wie het gebruikt, tekent daarom met twee handtekeningen: een RSA en een ed25519.
Een sleutel vervangen
Het is goed om een sleutel af en toe te vervangen, en zeker als je denkt dat de privésleutel is uitgelekt (bijvoorbeeld na een hack van de server of een vertrokken beheerder). Doe het zo:
- Maak een nieuwe sleutel onder een nieuwe selector, bijvoorbeeld
s2026, en zet de publieke sleutel in de DNS. - Wacht tot het record overal zichtbaar is (de TTL, zie DNS-cursus les 6.1).
- Laat de server tekenen met de nieuwe selector.
- Laat de oude sleutel nog een paar dagen staan: mail die al onderweg was of opnieuw wordt gecontroleerd, verwijst er nog naar.
- Trek de oude sleutel in door
p=leeg te maken (v=DKIM1; p=), of haal het record weg.
Bij diensten met CNAME-records doet de dienst dit zelf.
Wat DKIM laat falen
- Mail wordt onderweg veranderd: een mailinglijst die
[lijstnaam]in het onderwerp zet of een voettekst toevoegt, een virusscanner die een regel onder de mail plakt, een doorstuurserver die de opmaak omzet. - Verkeerde of afgekapte sleutel in de DNS.
- Selector bestaat niet: een typfout in de naam, of
selector1._domainkey.example.com.example.com(de domeinnaam dubbel, omdat het paneel hem er zelf al achter zet). - Sleutel ingetrokken (lege
p=) terwijl de server nog met die selector tekent.
Controleren of het werkt
- Stuur een mail vanuit de dienst naar een adres bij Gmail of Outlook.com.
- Open de kopregels en zoek de
DKIM-Signature: noteerd=ens=. - Kijk in
Authentication-Resultsof erdkim=passstaat, en ofheader.d=jouw domein is. - Zoek de selector op:
dig TXT s._domainkey.example.com(of met een online tool). Er moet eenp=met een lange sleutel staan, of een CNAME die naar zo'n record leidt.
In de praktijk: zo ziet het eruit in een paneel
Bij een hostingpakket van WebOké staat DKIM standaard aan, met de selector x: het record heet x._domainkey.<jouwdomein>. In DirectAdmin zie je het in DNS Beheer; staat je DNS bij een andere partij, dan kopieer je dat record daarheen. In Mijn WebOké toont de kaart E-mail instellen welke waarde er moet staan en of die gevonden wordt. Bij andere aanbieders heet de selector anders (default, mail, dkim), maar je vindt hem op dezelfde manier: in het paneel of in de s= van een ondertekende mail.
Samenvatting
- DKIM is de controle die doorsturen overleeft en die je per dienst aan je eigen domein koppelt; voor DMARC telt alleen een handtekening met jouw domein in
d=. - In de
DKIM-Signaturevind jed=(domein) ens=(selector); de sleutel staat op<s>._domainkey.<d>. - Elke dienst krijgt een eigen selector; CNAME-records laten de dienst zelf sleutels vervangen. Zet DKIM met je eigen domein ook echt aan in de dienst.
- Gebruik 2048 bit; let op afgekapte sleutels bij het kopiëren.
- Vervang een sleutel met een nieuwe selector en trek de oude pas daarna in.
Quiz
Opdracht
Opdracht Z4.3: Een DKIM-selector controleren. Stuur een mail vanuit je eigen domein (of vanuit een dienst die namens je mailt) naar een eigen adres bij een andere aanbieder. Open de kopregels en vul de waarden van d= en s= uit de DKIM-Signature in, en wat er in Authentication-Results bij dkim= staat. Het programma zoekt de selector live op, volgt een eventuele CNAME, controleert de sleutel (aanwezig, niet leeg, lengte) en vertelt of d= uitgelijnd is met het domein dat jij als afzender opgeeft.
Verder lezen
De stappen in deze artikelen gelden voor de panelen van WebOké; bij andere aanbieders werkt het vergelijkbaar.
- Gratis DNS-cursus 4.4: DKIM: de handtekening onder je mail
- DirectAdmin handleiding 5.8: DKIM aanzetten en controleren
- DKIM instellen als de DNS bij een andere partij staat
- WebOké handleiding 6.7: De kaart E-mail instellen (MX, SPF, DKIM, DMARC)
- RFC 6376 (DKIM), RFC 8301 (sleutellengte en algoritmen), RFC 8463 (ed25519)
