23 Jahre aus Stockholm
Operator-Notizen · Aus dem Stockholm-Büro

DKIM-Signierung für transactional E-Mails — praktischer Leitfaden

RSA-Schlüsselpaar-Generierung über DNS-Publikation bis zur MTA-Konfiguration mit OpenDKIM und PowerMTA. Plus typische Fehler und ihre Lösungen.

DKIM ist die kryptographische Authentifizierungs-Schicht, die jedem Empfänger-Server beweist: diese Mail kommt wirklich von Ihrer Domain und wurde unterwegs nicht modifiziert. Für transactional E-Mail ist DKIM nicht optional. Dieser Beitrag ist ein praktischer Setup-Leitfaden.

Wie DKIM technisch funktioniert

DKIM signiert ausgehende E-Mails mit einem privaten Schlüssel. Der entsprechende öffentliche Schlüssel ist in DNS publiziert. Die Signatur wird in einem zusätzlichen Header hinzugefügt:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  d=ihr-unternehmen.de; s=auth1;
  h=from:to:subject:date:message-id;
  bh=lL05/o6mRphPfH9zBXh8mNgRJDGJU3+vDcRNwo+gd0E=;
  b=Bdsr3yWKvJ+sj/...

Schritt 1 — Schlüsselpaar generieren

# Mit OpenSSL ein 2048-Bit RSA-Schlüsselpaar erzeugen
openssl genrsa -out dkim_private.pem 2048
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem

# Public Key für DNS-Eintrag aufbereiten
openssl rsa -in dkim_private.pem -pubout -outform PEM | \
  tail -n +2 | head -n -1 | tr -d '\n'

Schlüssel-Länge: 2048 Bit ist Standard. 1024 Bit sind veraltet. 4096 Bit sind möglich, aber DNS hat 255-Zeichen-Limit pro String.

Schritt 2 — DNS-Eintrag publizieren

auth1._domainkey.ihr-unternehmen.de. IN TXT (
    "v=DKIM1; k=rsa; "
    "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuFSGGsJSj9NU"
    "..."
)

DNS-Propagation kann 24-48 Stunden dauern. Test-Tool: dig auth1._domainkey.ihr-unternehmen.de TXT.

Schritt 3 — MTA für Signierung konfigurieren

Bei OpenDKIM unter Postfix:

# /etc/opendkim.conf
Domain               ihr-unternehmen.de
KeyFile              /etc/dkim/dkim_private.pem
Selector             auth1
Mode                 sv

# /etc/postfix/main.cf
smtpd_milters         = inet:localhost:8891
non_smtpd_milters     = $smtpd_milters
milter_default_action = accept

Bei PowerMTA in der config.cfg:

<domain ihr-unternehmen.de>
    dkim-sign yes
    dkim-identity ihr-unternehmen.de
    dkim-selector auth1
    dkim-key-path /etc/pmta/dkim_private.pem
</domain>

Schritt 4 — Signierung verifizieren

Test-Mail an check-auth@verifier.port25.com (sendet Authentifizierungs-Report zurück). Eine erfolgreich signierte Mail zeigt im Header:

Authentication-Results: mx.google.com;
  dkim=pass header.i=@ihr-unternehmen.de header.s=auth1
  spf=pass

Praktische Aspekte für DACH-Setups

Mehrere Selektoren

Bei mehreren Versand-Anbietern: jeder Anbieter eigener Selektor — auth1 für Authorize Hosting, brevo für Brevo, sf für Salesforce. Dadurch sind die DKIM-Setups unabhängig.

DKIM-Schlüssel-Rotation

Best-Practice: DKIM-Schlüssel jährlich rotieren. Vorgehen: neuen Selektor mit neuem Schlüssel publizieren, MTA umstellen, alten Selektor 2-3 Wochen erhalten lassen, dann alten DNS-Eintrag entfernen.

SHA-256 vs. SHA-1

Standardmäßig SHA-256 (a=rsa-sha256). SHA-1 ist veraltet.

Häufige Probleme

Problem: DKIM signiert, aber Empfänger zeigt fail. Ursache: Body-Modifikation durch Mailserver auf dem Weg. Lösung: c=relaxed/relaxed Canonicalization nutzen.

Problem: DNS-Eintrag zu lang. Lösung: Auf 2048 Bit zurück oder Public Key in mehrere Strings aufteilen.

Problem: DKIM passt für direkte Empfänger, fail bei Mailing-Listen. Lösung: ARC (Authenticated Received Chain) statt DKIM allein.

Problem: DKIM passt, aber DMARC zeigt fail. Ursache: DKIM signiert mit falscher Domain (Anbieter-Domain statt eigener). Das ist der häufigste DMARC-Fehler.

DKIM und DSGVO

DKIM-Signaturen enthalten keine personenbezogenen Daten der Empfänger. Daher sind DKIM-Aspekte typisch DSGVO-irrelevant.

Brauchen Sie Hilfe bei der DKIM-Konfiguration?

In einem 30-45-minütigen Gespräch unterstützen wir Sie bei der DKIM-Setup für Ihre Domains und Anbieter.