E-Mails signieren mit DKIM

Seite 5: Schlüsseldienst

Inhaltsverzeichnis

Die Verfasser des DKIM-RFCs wollen wohl, dass ihr Standard sich möglichst schnell verbreitet, denn anders als für RFCs sonst üblich haben sie viele Bemerkungen mit Praxisbezug eingebaut. So auch das openssl-Kommando, das den privaten Schlüssel erstellt: openssl genrsa -out mail200801.private 1024. Der Name der Schlüsseldatei ist beliebig. Um den Überblick zu behalten, empfiehlt es sich jedoch, sie genauso zu nennen wie den DNS-Eintrag; Details dazu weiter unten. Die Schlüssellänge von 1024 Bit entspricht der Minimalanforderung des RFC, reicht aber derzeit vollkommen aus. Nun muss der öffentliche Schlüssel in die Datei mail200801.public extrahiert werden. Das geschieht mit openssl rsa -in mail200801.private -out mail200801.public -pubout -outform PEM.

Der DKIM-Standard sieht momentan ausschließlich vor, dass der öffentliche Schlüssel per DNS als TXT-Record verbreitet wird. Später soll ein eigener Record-Typ definiert werden. Der Inhalt der eben erzeugten PEM-Datei eignet sich jedoch noch nicht als DNS-Record. Das Kommando grep -v -e "^-" mail200801.public | tr -d "\n" entfernt den Public-Key-Header und -Footer sowie die Zeilenumbrüche.

mail200801._domainkey IN TXT "v=DKIM1\; k=rsa\; t=y\;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBbq6m S9PifYFlBcEe2nAvw6lR5RotPOyBm2tUks1Ytqqrr7W+CiiFj3Giy/Psd7sazBKUB/0IMYQ1BwglsUrUWOa+VKYSIFGAqx6fnaZ 4Uab0Kv5k8Nlo3LLcwDF311Jn7M4PvQRzelsFOteFbq/ugDTm+gq9FwsB/PSdrbYeEQIDAQAB"

Für den DNS-Server bind gehört der hier umbrochene öffentliche Schlüssel mit den Optionen in eine Zeile der passenden Zone-Datei.

Die vollständige Zeile für einen Eintrag in der Zone-Datei des DNS-Servers bind sieht dann so aus wie im Listing oben. Der Name des Records besteht aus dem Namen des Schlüssels und der Subdomain "_domainkey ". Es empfiehlt sich, wie hier gezeigt, in den Schlüsselnamen eine Versionsnummer einzufügen, denn Signatur-Schlüssel sollen aus Sicherheitsgründen regelmäßig ausgetauscht werden. Gleichzeitig sollen nicht mehr aktiv genutzte Schlüssel nicht gelöscht, sondern widerrufen werden. Zum Widerrufen setzt der Admin einfach einen Record ohne Schlüssel in seinen DNS: mail200801._domainkey IN TXT "v=DKIM1\; p=" Durch die Versionsnummer sind Überschneidungen zwischen aktiven und widerrufenen Schlüsseln ausgeschlossen. Die im RFC vorgeschriebene Subdomain "_domainkey " mit dem vorangestellten Unterstrich verhindert, dass der Key-Eintrag mit anderen Namen kollidiert.Neben dem mit p= eingeleiteten öffentlichen Schlüssel enthält der DNS-Record noch einige Parameter. Gemeinsam ist ihnen die Notation, bei der Parameter und Wert mit einem Gleichheitszeichen ohne Leerzeichen angegeben und mit einem per Backslash geschützten Semikolon "\; " abgeschlossen werden.

Der v-Parameter benennt die benutzte Version des DKIM-Standards. Er ist zwar optional, wird aber im RFC ausdrücklich empfohlen. Das v= muss als erster Eintrag genannt werden, wenn es überhaupt vorkommt. Bislang ist nur DKIM1 erlaubt. Als Nächstes folgt der k-Parameter, der den Schlüsseltyp (key type) spezifiziert. Auch er ist optional; die Vorgabe lautet "rsa ". Zuletzt vor dem Schlüssel steht der t-Parameter, der Sondereigenschaften spezifiziert, zum Beispiel, ob es sich um einen Testlauf (t=y) handelt. Dann nämlich dürfen Verifizierer die Signatur zwar prüfen, das Ergebnis aber nicht in Bewertungen der Nachricht einfließen lassen. Sobald der Postmaster sich seiner DKIM-Installation sicher ist, sollte er also einen TXT-Record ohne das t=y online stellen.Testweise fragt man den Eintrag mit dem Kommando dig mail200801._domainkey.example.com TXT +short ab. Unter Windows tut es der Befehl nslookup -type=TXT mail200801._domainkey.example.com.