✦ Oplossingen · DNS en domeinnaam

DKIM-fout: dkim=fail of dkim=none oplossen

Zie je dkim=fail, dkim=none of ‘body hash did not verify’? Lees hoe DKIM werkt, hoe je selector en sleutel controleert en waarom doorsturen DKIM breekt.

Zo ziet de foutmelding eruit

  • dkim=fail
  • dkim=none
  • dkim=permerror
  • dkim=fail (body hash did not verify)
  • dkim=neutral (body hash did not verify)

Waarom gebeurt dit?

DKIM (DomainKeys Identified Mail) zet een digitale handtekening op elke uitgaande mail. De verzendende server ondertekent bepaalde kopregels en de inhoud met een geheime sleutel. De bijbehorende publieke sleutel staat in de DNS van je domein, in een TXT-record op selector._domainkey.voorbeeld.nl. De selector is een naam die de verzender kiest, zodat je meerdere sleutels kunt hebben, bijvoorbeeld één voor je mailprovider en één voor je nieuwsbriefdienst. Welke selector gebruikt is, staat in de kopregel DKIM-Signature achter s=; het domein achter d=.

Bij dkim=none is de mail niet ondertekend: DKIM staat bij die verzender niet aan. Bij dkim=fail of dkim=permerror is er wel een handtekening, maar klopt die niet of kan de ontvanger de sleutel niet vinden of lezen. Oorzaken: het DNS-record ontbreekt, staat op de verkeerde naam, is afgekapt bij het plakken, of hoort bij een oude sleutel die de verzender niet meer gebruikt.

Een aparte oorzaak is dat de mail ná het ondertekenen is veranderd. ‘Body hash did not verify’ betekent dat de inhoud anders is dan bij het ondertekenen. Dat gebeurt als een doorstuurregel, mailinglijst, virusscanner of een server een disclaimer of voettekst toevoegt, of de opmaak van het bericht aanpast.

Zo herken je dit probleem

  • In de kopregels van een ontvangen mail (in Gmail Origineel weergeven, in Outlook Eigenschappen › Internetkoppen) staat dkim=fail, dkim=none of dkim=permerror.
  • Een DMARC-rapport toont DKIM-fouten voor een bepaalde verzender of een bepaald IP-adres.
  • Alleen doorgestuurde mail of mail via een mailinglijst faalt; rechtstreeks verstuurde mail niet.
  • Gmail weigert mail met de melding dat de afzender niet geauthenticeerd is: zie 550 5.7.26 Unauthenticated.

Zo los je het op, stap voor stap

Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.

  1. Zoek selector en domein in de kopregels

    Open een mail die faalt en zoek de regel DKIM-Signature. Achter d= staat het domein, achter s= de selector. Kijk ook in Authentication-Results wat de ontvanger concludeerde, en of er meerdere handtekeningen zijn; vaak ondertekent een dienst met zijn eigen domein én met dat van jou.

    DKIM-Signature: v=1; a=rsa-sha256; d=voorbeeld.nl; s=selector1; ...
    Authentication-Results: ...; dkim=fail (body hash did not verify) header.d=voorbeeld.nl
  2. Vraag het DKIM-record op

    Vraag het TXT-record op voor de selector die je vond. Je hoort een record te krijgen dat begint met v=DKIM1 en een lange waarde achter p= bevat: de publieke sleutel. Bij sommige diensten, zoals Microsoft 365, is het een CNAME naar een record van die dienst; dig volgt die vanzelf. Krijg je niets terug, dan staat het record niet (of op een andere naam) in je DNS.

    dig selector1._domainkey.voorbeeld.nl TXT +short
    
    # Windows
    nslookup -type=txt selector1._domainkey.voorbeeld.nl
  3. Controleer of de sleutel volledig is

    Een DKIM-sleutel is langer dan de 255 tekens die één tekststuk in een TXT-record mag hebben. Daarom wordt hij opgeknipt in meerdere stukken tussen aanhalingstekens, die bij het lezen aan elkaar worden geplakt. Ging er bij het plakken iets mis, zoals een afgekapt einde, een extra spatie of aanhalingsteken midden in de sleutel, of een regelafbreking, dan klopt de sleutel niet. Vergelijk het einde van de waarde achter p= met wat je verzender opgeeft. Een lege p= betekent dat de sleutel is ingetrokken.

    ; zo ziet een opgeknipte sleutel eruit (ingekort)
    selector1._domainkey  IN  TXT  ( "v=DKIM1; k=rsa; "
        "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
        "...IDAQAB" )
  4. Zet DKIM aan bij elke verzender

    Bij dkim=none ondertekent de verzender niet. Zet DKIM aan in het beheer van je mailprovider en van elke andere dienst die met je domein mailt, zoals nieuwsbrief- en factuurdiensten. Die geven dan een record (TXT of CNAME) dat je in je DNS zet; vaak moet je daarna in hun beheer nog op ‘activeren’ of ‘verifiëren’ klikken. Zonder eigen DKIM ondertekent een dienst soms met zijn eigen domein, wat voor DMARC niet telt als jouw domein.

  5. Controleer na een sleutelwissel of verhuizing

    Ben je van mailprovider gewisseld of heeft je provider een nieuwe sleutel aangemaakt, dan moet het DNS-record de nieuwe sleutel bevatten. Een oud record met een andere sleutel op dezelfde selector geeft dkim=fail. Na een nameserverwissel ontbreekt het DKIM-record vaak helemaal: zie nameservers wijzigen.

  6. Zoek wat de mail onderweg verandert

    Faalt DKIM alleen bij doorgestuurde mail of via een mailinglijst, dan is het bericht na het ondertekenen aangepast. Kijk of je eigen mailserver of een filter achteraf een disclaimer, handtekening of ‘extern’-label toevoegt; laat dat dan vóór het ondertekenen gebeuren, of zet het uit. Bij doorsturen door de ontvanger zelf kun je weinig doen; DMARC kijkt daarom naar SPF óf DKIM, en voor doorgestuurde mail is er een aparte techniek (ARC) bij de ontvangende kant.

  7. Test opnieuw

    Stuur na de wijziging een mail naar een externe mailbox en bekijk de kopregels. Je wilt dkim=pass zien met header.d=voorbeeld.nl. Houd rekening met de TTL van het DNS-record. Controleer daarna met de Mail-DNS-check of SPF en DMARC ook goed staan.

Let op: Verwijder een oude DKIM-sleutel pas als je zeker weet dat geen enkele dienst er nog mee ondertekent. Mail die onderweg is of in een wachtrij staat, kan nog met de oude sleutel ondertekend zijn.

Wanneer schakel je hulp in?

  • Je weet niet welke diensten allemaal namens je domein mailen en welke selector bij welke dienst hoort.
  • Het DNS-beheer laat je de lange sleutel niet goed invoeren, of hij blijft afgekapt.
  • DKIM faalt alleen voor mail via je eigen server en je vermoedt dat die de inhoud achteraf aanpast.
  • Je wilt DMARC strenger zetten en DKIM moet eerst voor alle verzenders kloppen.

Lukt het niet? Wij helpen

Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.

Aanvraag

Hulp aanvragen

Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.

Veelgestelde vragen

Vragen over dit probleem

Wat is een DKIM-selector?

Een naam die de verzender kiest om aan te geven welke sleutel hij gebruikte. Het DNS-record staat dan op selector._domainkey.voorbeeld.nl; de selector zie je in de kopregel achter s=.

Wat betekent ‘body hash did not verify’?

De inhoud van de mail is na het ondertekenen veranderd, bijvoorbeeld door een toegevoegde voettekst of disclaimer, of door doorsturen via een mailinglijst.

Wat is het verschil tussen dkim=none en dkim=fail?

Bij none is de mail niet ondertekend. Bij fail is er wel een handtekening, maar klopt die niet met de sleutel in de DNS of met de inhoud.

Heb ik DKIM nodig als SPF al klopt?

Ja. SPF breekt bij doorsturen, DKIM vaak niet. En voor DMARC en de eisen van grote mailboxdiensten is een goede DKIM-handtekening met je eigen domein belangrijk.