Exchange-2019-Zertifikate mit der PowerShell verwalten
Zertifikate spielen für Exchange eine wichtige Rolle bei Diensten wie SMTP und IIS. Doch oft haben diese Zertifikate eine begrenzte Lebensdauer und Admins neigen dazu, das Erneuern zu vergessen. Wir zeigen in diesem Workshop zunächst das Erneuern von Exchange-Zertifikaten über die PowerShell an, bevor wir im zweiten Teil den Vorgang über Let’s Encrypt automatisieren.
- Der Workshop erklärt, welche Rolle TLS/SSL-Zertifikate in Exchange 2019 für Dienste wie IIS/HTTPS und SMTP spielen und warum ablaufende Zertifikate häufig zu Ausfällen führen.
- Seit Exchange 2019 CU12 (bzw. Exchange 2016 CU23) ist das Erstellen/Erneuern von Zertifikatsanfragen nicht mehr über das EAC möglich – die Erneuerung erfolgt über die Exchange Management Shell (EMS) per PowerShell.
- Gezeigt wird der manuelle Ablauf: CSR erzeugen, Zertifikat importieren und anschließend den Exchange-Diensten (z. B. IIS/SMTP) zuweisen.
- Im zweiten Teil wird die Erneuerung mit Let’s Encrypt via ACME automatisiert – umgesetzt mit dem Client WACS (Windows ACME Simple) und einem Script-Hook zur automatischen Einbindung in Exchange.
- WACS legt dafür eine geplante Aufgabe an, prüft regelmäßig auf fällige Erneuerungen und protokolliert die Vorgänge (Eventlog/Logs) – optional inklusive Benachrichtigungen.
Exchange-Zertifikate dienen der verschlüsselten Kommunikation sowie der Authentifizierung. Dabei kommen unterschiedliche Zertifikatstypen zum Einsatz: Neben Single-Domain- oder Single-Server- stehen auch SAN- (Subject Alternative Name) und Wildcard-Zertifikate bereit. Ein Single-Server-Zertifikat enthält immer genau einen Domainnamen (beispielsweise "lab.schulenburg.co") und kommt meistens für Webseiten zum Einsatz. SAN-Zertifikate können mehrere alternative Antragstellernamen enthalten, beispielsweise "mail.lab.schulenburg.co" und "autodiscover.lab.schulenburg.co". Diese Variante ist also in der Lage, mehrere Domainnamen mit einem Zertifikat abzudecken und ist bei Exchange-Servern recht verbreitet. Wildcard-Zertifikate decken in der Regel eine komplette Domain ab und enthalten als SAN einen Wildcard-Domainnamen (beispielsweise "*.lab. schulenburg.co"). So bedient er alle Domainnamen unterhalb einer Domain mit nur einem Zertifikat. Ein Zertifikat mit dem SAN "*.lab.schulenburg.co" deckt damit alle Subdomains ab, sollte jedoch unter Exchange nicht für die Dienste POP3, IMAP und SMTP genutzt werden.
Die Zertifikate können selbstsigniert sein oder von einer internen beziehungsweise kommerziellen Zertifizierungsstelle (CA) stammen. Obwohl selbstsignierte Zertifikate für die interne SMTP-Kommunikation sehr gut funktionieren, ist es nicht empfehlenswert, sie für die Clientkommunikation zu verwenden. Hier ist es erforderlich, dass die Clients dem selbstsignierten Zertifikat vertrauen, was einen erhöhten Aufwand bedeutet. Für Exchange-Server sollten Sie Zertifikate von einer öffentlichen und vertrauenswürdigen CA einsetzen. Kostenlos und automatisiert stellt zum Beispiel die freie Zertifizierungsstelle "Let's Encrypt" Zertifikate für Exchange aus.
Wir zeigen in diesem Workshop zunächst den klassischen Weg zur Erneuerung der Zertifikate über die PowerShell. Hierbei kommen Windows Server 2022 und Exchange 2019 zum Einsatz. Im Anschluss automatisieren wir den Abruf von Let's-Encrypt-Zertifikaten mit einem "Automatic Certificate Management Environment"-Client (ACME-Client).
Exchange-Zertifikat erneuern
Um Exchange-Zertifikate zu erneuern, konnten Sie in der Vergangenheit wahlweise das Exchange Admin Center (EAC) oder die Exchange Management Shell (EMS) nutzen. Seit Exchange 2019 CU12 beziehungsweise Exchange 2016 CU23 lassen sich Zertifikatsanfragen nicht mehr über das Exchange Admin Center durchführen, da der hierzu nötige UNC-Pfad aus Sicherheitsgründen entfernt wurde. Betroffen von der Anpassung sind die Cmdlets "New-ExchangeCertificate", "Import-ExchangeCertificate" und "Export-ExchangeCertificate", bei denen die Parameter "RequestFile" beziehungsweise "FileName" nicht mehr verfügbar sind. Da die EAC diese Befehle im Hintergrund aufruft, stehen diese Aktionen dort nicht mehr zur Verfügung. In der EAC lassen sich nur noch Zertifikate löschen, Dienste für ein Zertifikat aktivieren oder selbstsignierte Zertifikate erstellen. Das Erneuern eines Zertifikats lässt sich nur noch in der EMS durchführen. Hierbei kommt das Attribut "FileData" mit Verweis auf das Zertifikat zum Einsatz.
Haben Sie kein Zertifikat, dass Sie als Grundlage für ein neues nutzen möchten, erstellen Sie eine gänzliche neue Zertifikatsignierungsanforderung (Certificate Signing Request; CSR) mit dem New-ExchangeCertificate-Cmdlet unter Einsatz des Attributs "GenerateRequest". Hierbei sind verschiedene Eigenschaften, wie Namen und Domains anzugeben. Es ist dabei sehr wichtig, alle benötigten Exchange-URLs zu kennen und korrekt beim Attribut "DomainName" zu hinterlegen.
Zur Abfrage der benötigten Exchange-URLs sind im Internet verschiedene Skripte verfügbar. Alternativ fragen sie die URLs über die EAC in den Eigenschaften der virtuellen Verzeichnisse ab. Wichtig ist zudem der erwähnte Parameter "GenerateRequest" – ist dieser nicht enthalten, entsteht automatisch ein selbstsigniertes Zertifikat. Eine komplette Anfrage sieht wie folgt aus:
New-ExchangeCertificate -GenerateRequest -FriendlyName "<Name des Zertifikats>" -PrivateKeyExportable $true -SubjectName "c=<Länderkürzel, zum Beispiel DE>, o=<Name der Organisation>,cn=<Exchange-URL>" -DomainName <Exchange-Domäne 1>, <Exchange-Domäne 2>
Als Ergebnis erhalten Sie eine sehr lange Zeichenfolge in der PowerShell. Sofern Sie eine Textdatei mit der Anfrage benötigen, lässt sich die Ausgabe nicht mehr direkt über das Attribut "RequestFile" exportieren. Hierfür müssen Sie diese Anfrage zunächst in eine Variable schreiben, die Sie dem Befehl voranstellen:
$binrequest = New-ExchangeCertificate [Rest wie zuvor]
Jetzt können Sie das Ergebnis in eine Textdatei umlenken. Für diesen Schritt stehen verschiedene Möglichkeiten zur Verfügung, am Schnellsten geht es so:
Set-Content -Path "C:\CertRequest\<Textdatei.txt>" -Value $certrequest
Bei einer Zertifikatserneuerung verwenden Sie das Get-ExchangeCertificate-Cmdlet, um die Details des zu erneuernden Zertifikats zu überprüfen, das für die Exchange-Dienste zur Anwendung kommt. Hierbei ist es ausreichend, sich den Daumenabdruck (Thumbprint) des Zertifikats zu merken, da Sie das vorhandene Zertifikat für die Anforderung nutzen können. Somit müssen Sie die einzelnen Details nicht mehr hinterlegen und der Befehl verkürzt sich auf die folgende Zeile:
Get-ExchangeCertificate -Thumbprint <Thumbprint> | New-ExchangeCertificate -GenerateRequest
Im Anschluss ist die Anforderung unter den Exchange-Zertifikaten mit dem Status "PendingRequest" ersichtlich. Sie wird nun bei einer Zertifizierungsstelle genutzt, um ein entsprechendes Zertifikat zu generieren. In unserem Fall haben wir ein 90-Tage-Testzertifikat über "sslforfree. com" erstellt. Das Zertifikat importieren Sie nun in Exchange:
Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content -Path C:\Certreq\ <Zertifikat>.cer -Encoding byte -ReadCount 0))
Nun steht es Exchange zur Verfügung, ist aber noch nicht aktiv und Sie müssen es noch den Exchange-Diensten wie IIS oder SMTP) zuweisen:
Enable-ExchangeCertificate -Server <Exchange-Server -Thumbprint <Wert des Thumbprint> -Services <Exchange-Dienst 1>,<Exchange-Dienst 2>
Das Zuweisen ist dabei auch über die EAC möglich. Der Austausch des Zertifikats ist damit abgeschlossen. Den Zugriff über ein neues Zertifikat prüfen Sie relativ einfach mit "Outlook on the Web". Dazu geben Sie im Browser die öffentliche Exchange-Adresse mit der Erweiterung "OWA" ein. Der Aufruf sollte ohne Fehlermeldung klappen und unser erstelltes Zertifikat zeigen.
Ob Outlook und Autodiscover korrekt laufen, lässt sich mit dem Microsoft Remote Analyzer prüfen. Im Analyzer führen Sie Verbindungstests im Bereich "Exchange" aus. Das alte Zertifikat löschen wir zum Abschluss über das Remove-ExchangeCertificate-Cmdlet mit dem zugehörigen Thumbprint-Wert.
Automatisierung mit Let's Encrypt
Für die automatische Konfiguration des Zertifikats nutzen wir Let's Encrypt. Diese öffentliche Zertifizierungsstelle ermöglicht das Abrufen und Installieren von kostenlosen TLS-/SSL-Zertifikaten auf eine einfache Art und Weise. Alle gängigen Browser und Clients erkennen diese Zertifikate als vertrauenswürdig an, doch leider sind diese nur drei Monaten gültig. Das stellt aber durch den hohen Automatisierungsgrad kein Problem dar.
Let's Encrypt ist ACME-fähige Zertifizierungsstelle und verwendet das zugehörige Protokoll zur Automatisierung. Die Auslieferung erfolgt über eine ACME-Clientsoftware von Drittanbietern. Let's Encrypt listet zwar solche Anwendungen auf seiner Website, kontrolliert diese jedoch nicht und gibt auch keine Garantie für deren Sicherheit oder Zuverlässigkeit.
Wir nutzen im Weiteren den ACME-Client "Windows ACME Simple" (WACS). Dessen Dateien legen wir im Verzeichnis "C:\Program Files\Lets Encrypt" ab. Eine Installation ist nicht nötig, wir passen aber die Konfigurationsdatei "settings_default.json" an und setzen die Einstellung "PrivateKeyExportable" auf "true". Dies ist nötig, um das erstellte Zertifikat zu exportieren. Sie müssen WACS mit erweiterten Rechten starten und sind dann in der Lage, Zertifikate über Let's Encrypt zu beantragen und in Exchange einzuspielen – der komplette Vorgang läuft ohne Browser ab. Nach dem Aufruf der Anwendung zeigt sich ein Menü, in dem "M" den Weg zu einem neuen Zertifikat öffnet.
Im Weiteren wählen wir die manuelle Einrichtung, alternativ lässt sich auch eine bereits erstellte Zertifikatsanforderung nutzen. Danach hinterlegen wir die von uns genutzten Hosts "mail.lab.schulenburg.co" sowie "autodiscover.lab.schulenburg.co" in einem einzelnen Zertifikat. Es folgen einige Fragen zur Zertifikaterstellung und nach der Verifizierung sowie dem Hinterlegen des Schlüsseltyps "RSA" fehlt nur noch der Speicher des Zertifikats. Für die Verifizierung stehen verschiedene Möglichkeiten zur Verfügung. Wir haben dies über Port 80 und den Arbeitsspeicher durchgeführt (Option "2").
WACS erlaubt, Skripte nach dem Prozess der Erneuerung aufzurufen. Dies nutzen wir, um das generierte Zertifikat im Anschluss direkt in Exchange einzubinden. Im Assistenten hinterlegen wir das Exchange-Skript mit dem Aufruf "./Scripts/ ImportExchange.ps1". Als Parameter geben wir folgende Erweiterung mit, damit das Zertifikat unter anderem den richtigen Diensten zugeordnet wird: "'{Cert-Thumbprint}' 'IIS,SMTP,IMAP' 1 '{CacheFile}' '{Cache-Password}' '{CertFriendlyName}'".
Bei der ersten Ausführung müssen Sie noch die "Terms of Services" bestätigen und eine E-Mail-Adresse hinterlegen. Die Vorbereitungen sind damit abgeschlossen und die eigentliche Erzeugung des Zertifikates startet. Der Prozess der Zertifikatsbeantragung und -installation ist in WACS sehr gut nachvollziehbar. Nach dem Bereitstellen des Zertifikats ist es im Browser direkt ersichtlich, ohne dass Exchange noch zu konfigurieren ist. Das Tool springt im Anschluss wieder ins Hauptmenü. Hier ist nun ein neues "Renewal" zu sehen, das die Details unserer Antragseigenschaften zeigt. Der Aufruf durch WACS erfolgt zukünftig durch diesen Befehl:
wacs.exe --source manual --host <mail.lab.schulenburg.co>,
<autodiscover.lab.schulenburg.co> --validationmode tls-alpn-01
--certificatestore <Zertifikatspeicher> --installation script
--script ./Scripts/<ImportExchange.ps1 –scriptparameters "'{CertThumbprint}'
'IIS,SMTP,IMAP' 1 '{CacheFile}' '{CachePassword}' '{CertFriendlyName}'"
Automatische Erneuerung von Zertifikaten
Das konfigurierte Zertifikat ist nur 90 Tage gültig und WACS kümmert sich zukünftig um die Erneuerung. Unter "Manage renewals" hinterlegen Sie die Details der gerade erstellten Zertifikatsanforderung, sodass ein Erneuern direkt erfolgen kann. Vorhandene Vorgänge lassen sich aufrufen und wieder neu anstoßen. Eine solche Erneuerung mit WACS müssen Sie auch explizit canceln, wenn sich ein Zertifikat nicht mehr erneuern soll.
Eine geplante Aufgabe ist für die Erneuerung aller vom Programm erstellten Zertifikate zuständig. Die Aufgabe wird von WACS selbst nach der erfolgreichen Anlage eines Zertifikats erstellt und ist in der Windows-Aufgabenplanung ersichtlich. Der Task läuft jeden Tag und prüft, ob ein Zertifikat zur Erneuerung ansteht. Dabei wird die Verlängerung bereits nach 55 Tage initialisiert und nicht erst am letzten Tag. Das Zeitfenster passen Sie in der Datei "settings.json" an. Andere Einstellungen wie das Startdatum lassen sich dort ebenfalls konfigurieren. Alternativ nutzen Sie dazu den Aufgabenplaner.
WACS ist sehr informativ und dokumentiert sämtliche Aktionen in der Windows-Ereignisanzeige mit der Quelle "winacme", sodass immer nachvollziehbar ist, wann welches Zertifikat geprüft und ausgetauscht wurde. Daneben bringt WACS noch ein eigenes Log mit und schreibt alle durchgeführten Aktionen mit. In der erwähnten Konfigurationsdatei lassen sich E-Mail-Benachrichtigung einrichten, was Sie schnell auf Fehler oder erfolgreiche Erneuerungen aufmerksam macht.
Fazit
Das Erneuern von Exchange-Zertifikaten ist eine lästige Pflicht, die Administratoren regelmäßig und oft auf den letzten Drücker beschäftigt. Mit dem Know-how aus diesem Workshop geht der Vorgang dank der PowerShell aber schnell vonstatten und lässt sich mit einem Werkzeug wie WACS automatisieren. (jp/ln)
Zertifikate werden in Exchange für verschlüsselte Kommunikation und Authentifizierung genutzt – insbesondere für IIS/HTTPS (z. B. Outlook on the Web) sowie SMTP/TLS. Läuft ein Zertifikat ab oder ist falsch zugewiesen, drohen Verbindungs- und Sicherheitswarnungen.
Der Artikel beschreibt Single-Domain/Single-Server-, SAN- und Wildcard-Zertifikate. Für Exchange sind SAN-Zertifikate verbreitet, weil sie mehrere Namen wie mail und autodiscover in einem Zertifikat abdecken können. Wildcard-Zertifikate sind möglich, werden im Beitrag aber nicht für alle Dienste empfohlen.
Seit Exchange 2019 CU12 bzw. Exchange 2016 CU23 lassen sich Zertifikatsanfragen nicht mehr über das Exchange Admin Center durchführen, weil die dafür genutzten UNC-/Parametermechanismen entfernt wurden. Dadurch erfolgt das Erstellen/Erneuern (CSR) in der Praxis über die Exchange Management Shell (PowerShell).
Vereinfacht besteht der Ablauf aus: Zertifikat identifizieren (Thumbprint), CSR erzeugen (New-ExchangeCertificate mit GenerateRequest), Zertifikat von der CA ausstellen lassen, anschließend per Import-ExchangeCertificate (FileData) importieren und mit Enable-ExchangeCertificate den Exchange-Diensten wie IIS oder SMTP zuweisen.
Der Beitrag empfiehlt als schnelle Sichtprüfung den Zugriff auf Outlook on the Web im Browser (korrektes Zertifikat, keine Warnungen). Zusätzlich lassen sich Autodiscover und weitere Verbindungstests mit dem Microsoft Remote Analyzer prüfen.
Let’s Encrypt stellt kostenfreie, von Clients als vertrauenswürdig akzeptierte Zertifikate aus. Diese sind typischerweise nur 90 Tage gültig – durch Automatisierung (ACME) ist das aber gut beherrschbar.
WACS (Windows ACME Simple) ist ein ACME-Client, mit dem Let’s-Encrypt-Zertifikate automatisiert bezogen werden. Im Artikel wird WACS so konfiguriert, dass nach der Erneuerung ein Skript ausgeführt wird, das das neue Zertifikat in Exchange importiert und den gewünschten Diensten zuweist.
WACS erstellt eine geplante Aufgabe in der Windows-Aufgabenplanung, die regelmäßig prüft, ob Zertifikate erneuert werden müssen, und den Prozess rechtzeitig anstößt. Parameter wie das Erneuerungsfenster lassen sich über die Konfiguration anpassen; Logs und Eventlog-Einträge erleichtern die Nachvollziehbarkeit.

Dieser Artikel erschien im IT-Administrator Sonderheft I/2024
"PowerShell – Infrastrukturen
automatisiert verwalten"
Das Sonderheft I/2024 liefert auf 205 Seiten praktisches Know-how zum Umgang mit der Microsoft-Skriptumgebung und deren Einsatz zur Automatisierung wichtiger Serversysteme. Das Autorenteam wirft unter anderem einen Blick auf die Methoden und Techniken, die die PowerShell für die Administration bereitstellt.
Bestellen Sie das Sonderheft hier als E-Paper
(Die gedruckte Ausgabe ist leider vergriffen)