DKIM-Schlüssel mit OpenSSL unter WSL generieren und in DNS eintragen

    Sicherer Versand von E-MailsDomain Keys Identified Mail (DKIM) ist eine Methode zur E-Mail-Authen­tifizierung. Die für die Signierung und Über­prüfung von Nach­richten erfor­der­lichen Schlüssel lassen sich mit OpenSSL im Sub­system für Linux erzeugen. Der Public Key muss dann mittels eines TXT-Records in das DNS einge­tragen werden.

    Mechanismen wie das Sender Policy Framework (SPF) oder DKIM dienen dazu, die Authen­tizität einer Nachricht zu belegen und so den Missbrauch von E-Mail einzu­schränken. Wenn man diese Techniken verwendet, dann verringert sich das Risiko, dass die eigenen Mails beim Empfänger im Spam-Ordner landen.

    Konfiguration abhängig vom Mail-System

    Nutzt man Online-Dienste wie GMail oder Mailchimp, dann kümmern sich in der Regel deren Betreiber um die DKIM-Konfiguration. Anders sieht es hingegen aus, wenn man Office 365 einsetzt. Dort bleibt es dem Anwender überlassen, die DKIM-Keys zu generieren und zu hinterlegen (siehe: Exchange Online für DKIM konfigurieren).

    Um die Echtheit von Mails zu bestätigen, signiert der Versender (Mail-Server, Newsletter-System, etc.) die Nachricht mit dem privaten Schlüssel, den man im jeweiligen System hinterlegt. Der Empfänger prüft die Signatur mit Hilfe des Public Key, den er aus dem DNS-Eintrag der Sender­domäne entnimmt.

    Auswahl des Tools zur Schlüsselgenerierung

    Einige Online-Tools vereinfachen das Generieren der Keys und das Zusammen­stellen des DNS-Eintrags. Man gibt bloß den Namen der Domäne ein und sie spucken die benötigten Daten aus.

    Für produktive Umgebungen ist deren Einsatz jedoch nicht ratsam, weil die Betreiber dieser Services dann auch im Besitz des privaten Schlüssels sind und sein Missbrauch somit nicht ausgeschlossen werden kann.

    Stattdessen bietet sich an, die Keys selbst mit OpenSSL zu erzeugen. Wenn man unter Windows arbeitet, müsste man dort jedoch erst OpenSSL installieren. Dies kann man sich sparen, wenn man das Subsystem für Linux (WSL) eingerichtet hat. Für Admins und Web-Entwickler gehört das WSL zu den besten neuen Windows-Features der letzten Jahre und sollte auf deren Workstations nicht fehlen.

    Aufruf von OpenSSL

    Entscheidet man sich dort für Ubuntu als Distribution, dann enthält dieses bereits eine aktuelle Version von OpenSSL. Um den privaten Schlüssel zu erzeugen, gibt man folgenden Befehl ein:

    openssl genrsa -out contoso.private.key 2048

    Die Schlüssellänge von 2048 ist nicht zwingend, aber üblich.

    Anschließend generiert man daraus den öffentlichen Schlüssel:

    openssl rsa -in contoso.private.key -pubout -out contoso.public.key

    Die Datei contoso.public.key enthält in unserem Beispiel den Public Key, kodiert als Base64. Für den DNS-Eintrag benötigt man ihn jedoch ohne die Beginn- und Ende­markierung sowie ohne Zeilenumbrüche.

    Privaten und öffentlichen Schlüssel für DKIM mit OpenSSL generieren

    Wenn man diese nicht manuell entfernen möchte, dann kann man die Datei gleich auf der Linux-Shell durch den Stream-Editor schicken und die Zeilen­vorschübe mit tr ausfiltern:

    sed 's/---.*---//' dkim.pub.key |  tr -d '\n' | paste -d ' '

    Während man nun den privaten Schlüssel in das Mail-System auf die jeweils dort vorgesehene Weise eingibt, benötigt man den Public Key für das DNS.

    TXT-Eintrag im DNS anlegen

    Dort erstellt man einen TXT-Eintrag, dessen Name sich so zusammensetzt:

    Selector._domainkey.domain.tld

    Den Selector kann man beliebig wählen (Klein- und Großbuchstaben, Ziffern und Bindestriche), aber es ist sinnvoll, dafür einen sprechenden Namen zu finden. Er könnte etwa das Jahr oder das Programm enthalten, das den Key nutzt. Pro Domäne dürfen mehrere derartige Einträge hinterlegt werden, und der Selector dient dazu, diese voneinander zu unterscheiden. Ein Beispiel wäre:

    newsletter2021._domainkey.contoso.de

    Nach dem Namen benötigt man nun noch den Wert für den TXT-Record. Er beginnt meistens mit der optionalen DKIM-Version, gefolgt vom Typ und Wert des öffentlichen Schlüssels:

    v=DKIM1;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA…

    TXT-Eintrag für DKIM in einen Windows-basierten DNS-Server

    Nachdem man den TXT-Eintrag gespeichert hat, kann man diesen mit diversen Online-Tools testen. Eines davon findet sich zum Beispiel bei MXToolbox. Diese Programme prüfen jedoch nur das Vorhandensein und die syntaktische Korrektheit des DNS-Eintrags.

    Korrektheit des DNS-Eintrags für DKIM mit einem Online-Tool prüfen

    Ob die Signierung tatsächlich funktioniert, lässt sich nur über das Versenden einer Mail herausfinden. Schickt man sie etwa an eine Adresse bei GMail oder Outlook.com, dann kann man dort den rohen Inhalt der Nachricht anzeigen. Im Header müsste sich ein dkim=pass finden.

    Nachweis für die gültige DKIM-Signierung im Header der empfangenen Nachricht

    Als Problem könnte sich zum Beispiel erweisen, dass die Nachrichten über PHP mail rausgehen. Dort lässt sich die Reihen­folge der E-Mail-Header nicht festgelegen, so dass der DKIM-Eintrag nicht wie vom RFC empfohlen an erster Stelle steht.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Keine Kommentare