DKIM mit Office 365

DKIM ist ein sehr effektives Verfahren, wie ein Absender einer Mail gegenüber dem Empfänger belegen kann, dass der auch das Recht hat, mit dieser Domäne zu senden. Würden alle Mailversender mit DKIM arbeiten, wäre das Thema Spam zwar dennoch nicht gelöst aber die Fälschung von Absendern wäre Geschichte. Es dient also primär dazu, dass ein Absender seinen "Namen" schützen kann und Veränderungen der Mails erkannt werden. Es ist aber kein Ersatz für Verschlüsselung und richtige Signaturen. Dennoch nutzt Office 365, oder genauer Exchange Online, die Möglichkeiten von DKIM um eingehende Mails zu verifizieren und ausgehende Mails entsprechende zu kennzeichnen.

Achtung:
Diese Seite nicht nicht aktuell. Seit 1. Jan 2021 sind die DKIM-Einstellungen ins Security und Compliance Center auf https://protection.office.com/dkimv2 gewechselt. Die grundlegende Funktion ist aber immer noch korrekt.

Vorarbeiten für DKIM Versand

Wenn Sie über Office 365 Mails mit DKIM-Signatur versenden wollen, dann müssen Sie der Welt natürlich mitteilen, dass ihre Domain per DKIM gesichert wird. Ohne Office 365 müssten Sie nun Schlüsselpaare erstellen, von denen sie den privaten Schlüsseln in ihrem Mailserver einbinden und den öffentlichen Schlüssel in den DKIM-Einstellungen im DNS hinterlegen. Mit Office 365 übernimmt Microsoft für Sie diese komplette Einstellung. Sie müssen nur zwei Dinge tun.

  1. DNS-Admin: DNS-Einträge in ihrer Domain eintragen
    Hinweis: Einige DNS-Tools prüfen die Gültigkeit der Zieladresse, die aber erst angelegt wird, wenn Sie in Exchange einmal versucht haben DKIM zu aktivieren
  2. Exchange Admin: DKIM auf der Domain aktivieren

Da Microsoft eigentlich für Kunden keine DNS-Server und Webseiten bereit stellt, werden die meisten Office 365 Kunden diese Einträge in ihrer DNS-Zone bei einem anderen Provider durchführen. Ich habe bislang noch keinen Kunden gehabt, der als Nameserver für seine Zone die Office 365-DNS-Server eingetragen hat. Daher lasse ich diesen Sonderfall einmal weg.

Achtung:
Am Ende dieser Konfiguration MÜSSEN sie alle Mails Über Office 365 versenden. Da Sie keinen Zugriff auf die privaten Schlüssel haben und der DKIM-Eintrag im DNS die Signatur fordert, wird jeder andere Empfänger mit DKIM-Prüfung Mails ohne DKIM-Signatur ablehnen. Sie sollten also Mails aus ihrer On-Prem-Umgebung über Office 365 in das Internet versenden. Dabei hilft ihnen natürlich der Exchange Hybrid-Mode mit einem lokalen Connector-Server. Ansonsten sollten Sie in der Cloud einen "Inbound Connector" anlegen, der Mail von ihren "vertrauenswürdigen" Hosts annimmt und als Relay weiter versendet.

Diese "Muss"-Aussage können Sie relativieren, wenn Sie die Mail mit 3rd Party Produkten verändern und einen anderen Selector auswählen. Jeder Mailserver signiert die Mail mit seinem eigenen Key und im DNS gibt es entsprechend dann auch mehrere Selektoren.

DNS-Einträge addieren

Eigentlich sehen die DNS-Einträge für DKIM bei Microsoft immer gleich aus. Allerdings sollten Sie dennoch die aktuellen Einstellungen per Exchange Online PowerShell abfragen

PS C:\> Get-DkimSigningConfig uclabor.de | fl sel*

Selector1KeySize           : 1024
Selector1CNAME             : selector1-uclabor-de._domainkey.fcarius.onmicrosoft.com
Selector1PublicKey         : v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCklDvN/oSarkjPao5SHNxqYavUpW3jpAGP
                             77dKDX+Lp6XTIZHN/QAkex6LTkjvKoWDzJNvQuuOJBtO3mZxofTmHlFJCcX8TK/zsTWqo6N1U2xKVonRU3OTAnvuzg
                             K1qemgG0VPL3n6CxkqbpsLLTRLJ2n/w7TYUOcNCADhVK7ZBQIDAQAB; n=1024,1472531624,1488256424
Selector2KeySize           : 1024
Selector2CNAME             : selector2-uclabor-de._domainkey.fcarius.onmicrosoft.com
Selector2PublicKey         : v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb/+5N3AIJ/YseXYY9rUb1BsmPQDq9Jcmh
                             5lhF38AbCx+OnHKtgtaMDKbz3hQXzOGKmCEeBBsQWQUniw/4EmrGUfQlQZ/f4ARxSxqtPjrhwQmBPuJUHoz0oUgw8O
                             jseNE412Sfx07ZfMRJeDjsBgeb4FXfZ2RHwKm3qUGzeZSc3QIDAQAB; n=1024,1472531624,1488256424
SelectorBeforeRotateOnDate : selector2
SelectorAfterRotateOnDate  : selector1

Interessant ist hier der "Selector1CNAME" und "Selector2CNAME". Die werden von Microsoft angelegt und verwaltet. Sie sollten diese auch erst einmal per NSLOOKUP erfragen.

PS C:\> Resolve-DnsName -Type TXT selector1-uclabor-de._domainkey.fcarius.onmicrosoft.com| fl

Name    : selector1-uclabor-de._domainkey.msxfaq.onmicrosoft.com
Type    : TXT
TTL     : 3600
Strings : {v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCklDvN/oSarkjPao5SHNxqYavUpW3jpAGP77dKDX+Lp6XTIZHN/Q
          Akex6LTkjvKoWDzJNvQuuOJBtO3mZxofTmHlFJCcX8TK/zsTWqo6N1U2xKVonRU3OTAnvuzgK1qemgG0VPL3n6CxkqbpsLLTRLJ2n/w7TYUOc
          NCADhVK7ZBQIDAQAB; n=1024,1472531624,1}

PS C:\> Resolve-DnsName -Type TXT selector2-uclabor-de._domainkey.fcarius.onmicrosoft.com| fl
Resolve-DnsName : selector2-uclabor-de._domainkey.fcarius.onmicrosoft.com : Der DNS-Name ist nicht vorhanden

In meinem Beispiel gibt es nur den ersten Eintrag. Der zweite Eintrag muss aber dennoch erstellt werden, denn irgendwann läuft der öffentliche Schlüssel ab und es findet ein "Rollover" statt. Dann wird von Microsoft der bislang nicht genutzte Selector aktiviert.

Sie gehen also auf die Verwaltungsseite bei ihrem DNS-Hoster und addieren dort beiden DNS-Einträge:

selector1._domainkey  CNAME 3600  selector1-msxfaq-com._domainkey.msxfaq.onmicrosoft.com
selector2._domainkey  CNAME 3600  selector2-msxfaq-com._domainkey.msxfaq.onmicrosoft.com

Ich habe hier im Beispiel meine "msxfaq.com"-Zone genommen. Ich muss zwei CNAME-Einträge in meiner Zone anlegen, die auf die von Microsoft bereitgestellten DNS-Einträge meines Office 365 Tenants verweisen.

Es kann durchaus einige Minuten oder sogar Stunden dauern, bis diese neuen Einträge im Internet "bekannt" sind.

Das Ergebnis sollten Sie dann per NSLOOKUP oder Resolve-DNSName einfach verifizieren:

PS C:\> Resolve-DnsName -Type cname selector1._domainkey.uclabor.de | fl

Name     : selector1._domainkey.uclabor.de
Type     : CNAME
TTL      : 3592
Section  : Answer
NameHost : selector1-uclabor-de._domainkey.fcarius.onmicrosoft.com

PS C:\Users\fcarius> Resolve-DnsName -Type cname selector2._domainkey.uclabor.de | fl

Name : selector2._domainkey.uclabor.de
Type : CNAME
TTL : 3600
Section : Answer
NameHost : selector2-uclabor-de._domainkey.msxfaq.onmicrosoft.com

Ich habe mittlerweile fast alle Domains entsprechend gesichert.

Hinweis:
Microsoft selbst veröffentlicht normal nur einen der beiden CNAME-Ziele. Es ist also normal, dass eine Abfrage eines CNAME auf einen nicht existierenden Eintrag verweist. Nur wenn ein KeyRollover passiert, wird der fehlender Eintrag mit dem neuen Key aktiviert und der alte Eintrag einige Zeit später entfernt.

Damit ist es aber allein nicht getan.

DKIM auf Domain aktivieren

Nun ist es an der Zeit die Einstellungen im Tenant zu aktivieren.

Achtung:
Diese Seite nicht nicht aktuell. Seit 1. Jan 2021 sind die DKIM-Einstellungen ins Security und Compliance Center auf https://protection.office.com/dkimv2 gewechselt. Die grundlegende Funktion ist aber immer noch korrekt.

Das können Sie einfach per Browser im Admin-Portal unter "Admin - Exchange – Schutz – dkim" vornehmen.

Update: Es gibt eine neue GUI unter der Adresse https://protection.office.com/dkimv2

Hier sehen Sie auch die Meldung, wenn die Einträge im DNS noch nicht von Microsoft abgefragt werden konnten. Sobald die DNS-Einträge von ihrem Provider aber veröffentlicht wurden, wird die Domäne ohne weitere Meldung aktiviert. Alternative geht es natürlich auch per PowerShell mit ihrer Domain:

New-DkimSigningConfig `
   -Identity msxfaq.com `
   -Enabled $true

Damit ist die Einrichtung abgeschlossen. Es obliegt nun Microsoft die Schlüssel bei Bedarf zu tauschen und die DNS-Einträge zu aktualisieren, auf die ihre CNAMEs verweisen.

Kontrolle der Aussendung

Office 365 übernimmt die Einstellungen sehr schnell. Ich habe ein paar Minuten per Outlook Web App einfach eine Mail versenden und auf der Empfängerseite den Header inspiziert. Oben steht der aktuellste Eintrag und sie sehen hier die internen Exchange Server, über die die Mails dann zugestellt wurden. Wer genau hinschaut, sieht einmal ein "DMARC validation: Pass;" und dann auch die DKIM-Signatur von Office 365.

Received: from E2016.netatwork.de (10.1.1.1) by E2016.netatwork.de
 (10.1.1.1) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.669.32 via Mailbox
 Transport; Mon, 27 Feb 2017 15:07:35 +0100
Received: from E2016.netatwork.de (10.1.1.1) by E2016.netatwork.de
 (10.1.1.1) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.669.32; Mon, 27
 Feb 2017 15:07:35 +0100
Received: from mail.netatwork.de (10.1.1.2) by E2016.netatwork.de
 (10.1.1.1) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.669.32 via
 Frontend Transport; Mon, 27 Feb 2017 15:07:35 +0100
X-NoSpamProxy-Tests: Realtime Blocklist filter: 0; Reverse DNS lookup: 0; Spam
 URI Realtime Blocklist filter: 0; CYREN spam protection: 0; Character set
 filter: 0; Require external sender in headers: 0; Word filter: 0; CSA
 Whitelist: Pass; DMARC validation: Pass; Validate and/or decrypt mail: Pass;
 CYREN virus protection: Pass; Filebased virus scanner: Pass; ICAP Antivirus
 scanner: Pass; : Pass; 
X-NoSpamProxy-Rating:
X-NoSpamProxy-TrustedMail: no
X-NoSpamProxy-CYRENID: str=0001.0A0C0204.58B432A6.02F6,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0
X-NoSpamProxy-Scl: -7.20
X-NetatworkMailGateway-Sender: User1@msxfaq.com
X-NoSpamProxy-Rule: All other inbound mails
X-NoSpamProxy-Gateway: 124.17.2.42:50880
X-NoSpamProxy Encryption-EncryptionAlgorithm: None
X-NoSpamProxy Encryption-SignatureAlgorithm: None
X-NoSpamProxy Encryption-SignatureStatus: None
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=msxfaq.com;
 s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;
 bh=S+iXvEFDj3f6JXKMaDNWb/kRKVwXxM9dDGz/COkegK4=;
 b=B6E0wUV+XQANDKd7+wd3VLC2rfmEhP+qB3q47HwSIxwny1EHRPMMRHPZMc5+1zqTp3r+uEd/ttrWySnrL91yKRqiy+64Gh+KcekVTnd21Y2eDkQ4csKhfkAH5Ps/TuCVly4BJma9CQEXeIPL2X/qEpTAe7c5UOgfxSjDA5x8UBY=
Received: from AMSPR06MB086.eurprd06.prod.outlook.com (10.242.90.142) by
 AMSPR06MB086.eurprd06.prod.outlook.com (10.242.90.142) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.919.13; Mon, 27 Feb 2017 14:07:23 +0000
Received: from AMSPR06MB086.eurprd06.prod.outlook.com ([169.254.15.158]) by
 AMSPR06MB086.eurprd06.prod.outlook.com ([169.254.15.158]) with mapi id
 15.01.0919.018; Mon, 27 Feb 2017 14:07:23 +0000
From: User1 <User1@msxfaq.com>
To: "Frank.carius.test@netatwork.de" <Frank.carius.test@netatwork.de>
Subject: Test Office 365 DKIM
Thread-Topic: Test Office 365 DKIM
Thread-Index: AQHSkQxxxxxxx39FqMkywsg==
Date: Mon, 27 Feb 2017 14:07:22 +0000
Message-ID: <AMSPR06MB0865D0xxxxxxx70@AMSPR06MB086.eurprd06.prod.outlook.com>
Accept-Language: de-DE, en-US
Content-Language: de-DE
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: spf=none (sender IP is ) smtp.mailfrom=User1@msxfaq.com; 
x-originating-ip: [62.159.244.133]
x-ms-office365-filtering-correlation-id: 37b188a9-5c5d-4d3e-23b7-08d45f19f385
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AMSPR06MB086;
x-microsoft-exchange-diagnostics: 1;AMSPR06MB086;6:7ADl0r5CsWVVbMV/v2P...IdQ==
x-microsoft-antispam-prvs: <AMSPR06MB086CEFAF6753667FFB3DF60CA570@AMSPR06MB086.eurprd06.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:;
x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040375)(601004)...(6043046);SRVR:AMSPR06MB086;BCL:0;PCL:0;RULEID:;SRVR:AMSPR06MB086;
x-forefront-prvs: 02318D10FB
x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)...
 (25786008)(5660300001);DIR:OUT;SFP:1101;SCL:1;SRVR:AMSPR06MB086;H:AMSPR06MB086.eurprd06.prod.outlook.com;
 FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en;
received-spf: None (protection.outlook.com: msxfaq.com does not designate
 permitted sender hosts)
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
Content-Type: multipart/alternative;
 boundary="_000_AMSPR06MB0865Dxxxxx570AMSPR06MB086eurprd_"
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Feb 2017 14:07:22.9022
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMSPR06MB086
Return-Path: User1@msxfaq.com
X-MS-Exchange-Organization-Network-Message-Id: ef92dea4-6592-430d-d15f-08d45f19faf3
X-MS-Exchange-Organization-AVStamp-Enterprise: 1.0
X-C2ProcessedOrg: 1191ecb5-aafb-41d5-a616-52a314c7d5db
X-MS-Exchange-Organization-AuthSource: E2016.netatwork.de
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Exchange-Transport-EndToEndLatency: 00:00:00.2969301

Wichtig ist, das die DKIM-Signatur enthalten ist und die Empfängerseite diese Information auch korrekt auswerten kann.

Sonderfall "Routing"-Domain

Für das interne Routing von Mails bei Hybrid-Bereitstellungen nutzt Microsoft zusätzlich die Domain "<tenantname>.mail.onmicrosoft.com". Normalerweise kann damit nie eine Mail in das Internet versendet werden, denn sie sollte nie als primäre Adresse bei einem Objekt auftauchen. Daher ist auch die DKIM-Einstellung für diese Domain nicht nutzbar:

Sie könnten die Domain in Exchange Online sogar aktivieren aber es kann nicht funktionieren: Sie sind nicht der Domain-Inhaber für "mail.onmicrosoft.com" und könnten daher dort auch keine DKIM-Einträge einbinden.

Weitere Links