DKIM oder auch DomainKeys genannt, ist ein Verfahren um die Authentizität von E-Mails festzustellen. Die grundlegende Funktionsweise ist dabei recht einfach erklärt:
Der sendende Mailserver berechnet einen Hashwert für jede von ihm gesendete Mail und hängt diesen Hash an jede Mail im E-Mail Header an. Der empfangene Mailserver kann die Signatur auswerten und ebenfalls den Hash berechnen. Stimmt der im Mail Header angegebene Hash mit dem berechnetem Hash überein, ist sichergestellt, dass die Mail vom E-Mail Servers des Absenders stammt und nicht verändert wurde.
Damit der Hash nicht einfach während der Übertragung der Mail verändert werden kann, wird der Hash vom sendenden Mailserver verschlüsselt und vom empfangenden Mailserver entschlüsselt. Die Verschlüsslung basiert auf asymmetrischer Verschlüsselung und die erforderlichen Schlüssel können einfach selbst erstellt werden. Eine Zertifizierungsstelle wie bei SSL-Zertifikaten benötigt es dazu nicht.
RSA Schlüssel erstellen
Um DKIM nutzen zu können, wird ein privater Schlüssel und ein öffentlicher Schlüssel benötigt. Der öffentliche Schlüssel wird im DNS als TXT-Record veröffentlicht, der private Schlüssel dient zum signieren der Mail. Die entsprechenden Schlüssel können einfach selbst erzeugt werden. Mit dem Programm OpenSSL lässt sich unter Windows (und Linux) die entsprechenden Schlüssel für DKIM ziemlich einfach erstellen.
Für Windows Betriebssysteme wird zunächst OpenSSL benötigt, welches hier runtergeladen werden kann:
OpenSSL kann auf einem beliebigen Rechner installiert werden. In der Standardinstallation wird es unter “C:\Program Files (x86)\OpenSSL” installiert:
Nach der Installation, kann eine Eingabeaufforderung (cmd) mit Administrator Rechten gestartet werden. Mit dem folgenden Befehl muss dann zunächst in das Programverzeichnis von OpenSSL gewechselt werden:
cd "C:\Program Files (x86)\OpenSSL\bin"
Mit dem folgenden Befehl kann jetzt der private Schlüssel erstellt werden:
openssl.exe genrsa -out DKIM_Private_Key.key 2048
Der öffentliche Schlüssel wird dann mit dem folgenden Befehl erzeugt:
openssl.exe rsa -in DKIM_Private_Key.key -out DKIM_Public_Key.public -pubout -outform PEM
Im Verzeichnis liegen nun 2 Dateien, der Öffentliche Schlüssel “DKIM_Public_Key.public” und der private Schlüssel mit dem Namen “DKIM_Private_Key.key”:
Der öffentliche Schlüssel muss nun etwas bearbeitet werden, damit dieser später im DNS veröffentlicht werden kann. Aktuell enthält der Public Key (DKIM_Public_Key.public) mehrere Zeilen:
Die Zeilen mit “—–BEGIN PUBLIC KEY—–“ und “—–END PUBLIC KEY—–“ werden entfernt:
Danach werden die Zeilenumbrüche entfernt, der komplette Schlüssel steht nun in einer Zeile:
Hinweis: Unbedingt darauf achten, dass keine Zeichen des Schlüssels entfernt werden, der Schlüssel ist sonst ungültig.
DNS Eintrag erstellen
Damit DKIM funktioniert, muss ein entsprechender DNS-Eintrag erstellt werden. Es handelt es sich um einen TXT-Eintrag, ähnlich des TXT-Eintrags für SPF.
Der TXT-Record für DKIM wird hier beispielhaft bei dem Hoster Strato gesetzt. Die DNS Einstellungen finden sich im Kundencenter unter dem Punkt “Domainverwaltung”:
Hier können für die jeweilige Domain neue TXT-Records angelegt werden:
DKIM TXT-Records sind nach dem folgenden Schema aufgebaut:
keyselector._domainkey.domain.tld
Der “Keyselector” ist ein frei wählbarer Name um den DKIM Eintrag zu identifizieren. Es können also mehrere DKIM-Einträge existieren. Der Key Selector wird an eine DKIM signierte Mail im Header angegeben, sodass ein empfangender Mailserver daraus den entsprechenden DNS-Record zusammensetzen und abrufen kann.
Für den Wert werden die folgenden Optionen angegeben:
- v=DKIM1 (Die genutzte DKIM Version)
- k=rsa (Angabe des Schlüsseltyps, in diesem Fall “rsa”)
- p=Öffentlicher Schlüssel (Hier wird der zuvor generierte Öffentliche Schlüssel angegeben.
Bei Strato sieht es dann so aus:
Ich habe “dkim1” als Selector gewählt, bei Bedarf kann ich so einfach die Selektoren erhöhen, falls dies nötig sein sollte.
Nachdem der TXT-Eintrag gesetzt wurde, lassen sich die Einstellungen auch direkt überprüfen:
Auf der Webseite kann der Keyselector und die Domain angegeben und geprüft werden:
Die Webseite liefert dann den DNS-Eintrag und das Ergebnis. Hier sieht man, dass aus Selector und Domain der entsprechende DNS Eintrag zusammengesetzt wurde:
Wenn die Prüfung erfolgreich war, kann die Konfiguration der Sophos UTM beginnen.
Konfiguration Sophos UTM
Die Konfiguration der UTM ist schnell erledigt. Die DKIM-Einstellungen finden sich unter dem Punkt “Email Protection” auf dem Reiter “Erweitert”:
Unter dem Punkt “DomainKeys Identified Mail (DKIM)”, wird nun der private Schlüssel (DKIM_Private_Key.key) eingetragen. Der Schlüssel kann komplett übernommen werden. Es ist nicht nötig Passagen zu entfernen.
Im Feld “Schlüsselselektor” wird nun der zuvor vergebene Selector aus dem DNS Eintrag eingetragen, in diesem Fall also “dkim1”. Es handelt sich hier nicht um die Version (v-Option im DNS-Eintrag“), sondern um den frei wählbaren Namen (Selector).
Im Feld DKIM-Domänen werden die Domänen angegeben, für die der DKIM-Header angefügt werden soll. Gibt es mehrere E-Mail Domänen, können hier auch mehrere Domänen angegeben werden. Bei mehreren Domänen muss der DKIM-DNS Eintrag auch für die weiteren Domänen angelegt werden:
Nachdem die Einstellungen übernommen wurden, kann getestet werden.
Test
Ob die DKIM Konfiguration funktioniert, lässt sich einfach testen indem eine E-Mail an die folgende Adresse verschickt wird:
Der Dienst prüft die SPF und DKIM Einstellungen und informiert über das Resultat.
In diesem Fall wird die Mail über einen Exchange Server versendet, Exchange muss die ausgehenden Mails über die Sophos UTM ins Internet leiten, da die DKIM Signatur erst durch die Sophos UTM angehangen wird.
Hinweis: Exchange Server bietet kein Bordmittel für das Hinzufügen der DKIM Signatur.
Nach kurzer Zeit wird ein Authentication Report zurück gesendet. Der Report enthält dann die Ergebnisse:
Wenn in der Antwortmail “DKIM check pass” angezeigt wird, funktionieren die DKIM Einstellungen.
Etwas weiter unten in der Antwortmail findet sich auch der DKIM Header der Original Mail. Hier sieht man die Signatur, welche durch die UTM angehangen wurde:
Die Antwortmail enthält ebenfalls eine DKIM Signatur, welche im Header sichtbar ist: