Gerade habe ich eine neue Version des Exchange Certificate Assistant hochgeladen. Die alte Version verwendet noch das Let’s Encrypt Protokoll ACMEv1, welches nicht mehr von Let’s Encrypt unterstützt wird.
Die neue Version 3 des Certificate Assistant verwendet nun das PowerShell Modul Posh-ACME, um automatisch Zertifikate für Exchange Server via Let’s Encrypt anzufordern. Posh-ACME ist ACMEv2 kompatibel und somit auch in der Lage Wildcard Zertifikate von Let’s Encrypt anzufordern. Der Certificate Assistant verwendet allerdings nach wie vor keine Wildcard Zertifikate, sondern SAN-Zertifikate, welche mittels HTTP-01 Challenge validiert werden. Der Vorteil von HTTP-01 ist, dass sich der komplette Prozess für Exchange Zertifikate automatisieren lässt und keine Anpassungen am DNS erforderlich sind. Es sind nur wenige Einstellungen im Script selbst zu definieren, der Rest läuft dann vollautomatisch.
Die aktuelle Certificate Assistant Version unterstützt die folgenden Exchange Server Versionen:
- Exchange 2010 (PowerShell 5 erforderlich, PowerShell 5 ist nicht für SBS Server freigegeben)
- Exchange 2013
- Exchange 2016
- Exchange 2019
Ich habe mal ein kleines Video aufgenommen welches den Certificate Assistant auf einem Exchange 2019 Server in Aktion zeigt:
Exchange Zertifikate Assistant kann hier runtergeladen werden:
Im ZIP Archiv findet sich jeweils ein Script je nach Exchange Version. Hier noch eine kleine Anleitung zur Benutzung.
Anleitung
Im Script finden sich ein paar grundlegende Einstellungen die zunächst konfiguriert werden müssen. Die folgenden drei Einstellungen müssen zwingend angepasst werden, die restlichen Einstellung sind optional:
Erforderliche Einstellungen
Mittels $LetsEncryptMode wird festgelegt, über welches Let’s Encrypt System die Zertifikate angefordert werden. “LE_Stage” ist das Testsystem, mit dem zunächst die Funktion des Scriptes getestet werden kann. Im Modus “LE_Stage” werden keine gültigen Zertifikate angefordert und es greifen keine Let’s Encrypt Limits. Der “LE_Stage”-Modus ist also ideal zum Testen, wenn erfolgreich ein Zertifikat ausgestellt wurde, kann das Script das Let’s Encrypt Poduktiv System verwenden um gültige Zertifikate anzufordern (LE_Prod).
$ContactMail ist für die Registrierung des Let’s Encrypt Kontos erforderlich. Hier muss eine gültige E-Mail Adresse angegeben werden. Das Let’s Encrypt Konto wird, wenn nötig, automatisch vom Script erstellt.
$PFXPasswort legt das Passwort für das Zertifikat (PFX-Datei) fest. Das Passwort ist erforderlich, wenn das Zertifikat auch auf anderen Servern installiert werden soll.
Optionale Einstellungen
$WriteConsoleLog steuert die Logausgabe, es wird immer ein Logfile im Certificate Assistant Verzeichnis geschrieben, mittels $WriteConsoleLog lässt sich nur die Ausgabe in der Konsole abschalten ($false), nicht aber das Logfile.
$DetermineExchangeFQDNs und $CustomFQDNs gehören zusammen. In der Standardeinstellung versucht das Script automatisch die erforderlichen Hostnamen für das Zertifikat zu ermitteln ($DetermineExchangeFQDNs = $true). Wenn andere Hostnamen oder zusätzlichen DNS-Namen gewünscht oder erforderlich sind, kann $DetermineExchangeFQDNs auf den Wert $false gesetzt werden. In diesem Fall müssen dann alle DNS-Namen angegeben werden ($CustomFQDNs).
Die Einstellungen ab $SendMail sollten selbsterklärend sein. Certificate Assistant verschickt nach einem Durchlauf das Logfile per Mail.
Hinweise
Exchange Certificate Assistant ist darauf ausgelegt direkt auf einem Exchange Server ausgeführt zu werden. Der Exchange Server selbst muss aus dem Internet unter den entsprechenden Hostnamen auf Port 80 (http) und Port 443 (https) erreichbar sein. Andernfalls schlägt die Validierung fehl und es kann kein Zertifikat angefordert werden.
Eine öffentliche CA wie Let’s Encrypt kann keine Zertifikate für “nicht öffentliche” Domänen ausstellen. Es können also keine Zertifikate mit Hostnamen wie “server1.domain.local” angefordert werden. Die Exchange Virtual Directorys müssen also auf öffentliche Hostnamen konfiguriert werden. Eine entsprechende Konfiguration ist hier beschrieben:
- Exchange 2019: Die Basiskonfiguration
- Exchange 2016: Die Basiskonfiguration
- Exchange 2013: Die Basiskonfiguration
Bei Problemen oder Fehlern mit diesem Script kann gerne das Forum genutzt werden. Bitte in diesem Fall immer das Logfile anhängen und darauf achten, dass keine sensiblen Informationen im Logfile stehen (also bitte entsprechend löschen).