Ich habe angefangen den “Exchange Certificate Assistant” zu überarbeiten. Die bisherige Version ist nicht mehr kompatibel zum aktuellen ACMESharp Modul und erfordert daher eine alte Version des Moduls. Da sich aber mittlerweile einige relevante Teile des ACMESharp Moduls geändert haben, ist es Zeit für eine neue Version des “Exchange Certificate Assistant”.
Ich habe den “Certificate Assistant” daher grundlegend überarbeitet und dabei auch paar Verbesserungen eingeführt:
- Es wird ein Logfile erzeugt
- Das Logfile kann per Mail versendet werden
- Das Logfile liegt im CSV-Format vor und lässt sich daher weiter verarbeiten und leichter analysieren
- Die Fehlerbehandlung ist im Script nun nahezu durchgängig
- Das Script ist zur aktuellen ACMESharp Modul Version kompatibel (derzeit Version 0.9.1.326)
Es gibt aber auch einige Stellen an denen ich noch schrauben muss:
- Derzeit ist das Script nur mit Exchange 2016 auf Server 2016 getestet worden
- Support für Server 2012 R2 und Exchange 2013 muss getestet, bzw. hinzugefügt werden
- Aufräumen der alten / abgelaufenen Zertifikate
- Das Anlegen einer geplanten Aufgabe für die Erneuerung ist entfallen
Let’s Encrypt Zertifikate sind bekanntlich 3 Monate lang gültig. In der alten Version des Scripts, wurde ein geplanter Task angelegt, der das Zertifikat erneuert. Dies soll auch weiterhin so sein, jedoch soll der Task bestimmen, wann das Zertifikat erneuert wird. Dazu ist nur noch ein erneuter Aufruf des Scripts nötig.
Ich stelle mir das in etwa so vor:
- Erster Aufruf des Scripts durch Admininistrator
- Script installiert nötige Voraussetzungen
- Script konfiguriert das Zertifikat
- Administrator legt geplante Aufgabe an, die das Script beispielsweise alle 60 Tage startet
- Script erneuert Zertifikat automatisch, ohne Benutzerinteraktion
Für die Exchange 2013 und Exchange 2010 erstelle ich eigene Versionen des Scripts, so müssen weniger “Versionsabhängigkeiten” innerhalb eines Script berücksichtigt werden. Ich denke dadurch wird es etwas einfacher.
Es gibt natürlich trotzdem ein paar Voraussetzungen:
- Exchange 2016 auf Server 2016 (Support für weitere Exchange und OS Versionen folgt)
- Exchange 2016 muss auf Port 80 (http) und Port 443 (https) aus dem Internet erreichbar sein
- Exchange 2016 muss mit gültigen FQDNs konfiguriert sein, auf .local und .intern (usw) endende FQDNs werden nicht unterstützt
- Alle konfigurierten Exchange 2016 FQDNs müssen aus dem Internet erreichbar sein (interne, sowie externe FQDNs)
Nach aktuellen Best Practises sollten interne und externe FQDNs eh gleich sein, daher sollten die Voraussetzungen im Normalfall kein Problem darstellen. Der interne Servername spielt dabei keine Rolle, lediglich die konfigurierten URLs der Exchange Dienste sind für das Script relevant. Die entsprechenden Hostnamen werden durch das Script automatisch ermittelt, können im Bedarfsfall aber auch fest im Script hinterlegt werden.
Ich habe hier einmal ein Video eines ersten Durchlaufs auf einem frisch konfigurierten Exchange 2016 Server erstellt:
Den Download für die alte Version lasse ich zunächst online. Ich würde mich freuen, wenn sich jemand bereit erklärt die aktuelle Version zu testen. Falls es Probleme gibt, dann schickt bitte das Logfile und ggf. Screenshots von der Fehlermeldung per Mail an mich. Bitte zunächst aber nur in Verbindung mit Exchange 2016 testen, andere Exchange Versionen teste ich zunächst in meiner Testumgebung.
Hier nun der Download, der noch ein bisschen Beta Charakter hat:
Die übrigen Punkte auf meiner ToDo Liste versuche ich so schnell wie möglich abzuarbeiten. Ich würde mich aber freuen, wenn ich möglichst viele Logfiles aus anderen Umgebungen erhalten würde. Auch Logfiles in denen das Script fehlerfrei durchgelaufen ist, können bei der Verbesserung helfen. Verbesserungsvorschläge und Kritik wie immer auch gerne per Mail über das Kontaktformular.
Update 27.02.18
In meiner Testumgebung wird das Zertifikat auch automatisch erneuert, ich habe dazu eine geplante Aufgabe angelegt. Wie oben beschrieben, erstellt das Script die Aufgabe nicht automatisch. Die folgende Aufgabe hat bei mir problemlos funktioniert:
Der ausführende Benutzer muss lokale Admin Rechte auf dem Server haben, aber natürlich auch entsprechende Exchange Berechtigungen. Ich habe hier zum Testen den Domain Administrator verwendet, welche Rechte genau erforderlich sind, muss ich noch testen. Die Einstellungen, die ich verändert habe sind in den Screenshots zu sehen.
Ich habe für meinen Test einen Trigger auf den heutigen Tag gesetzt, es funktioniert hier aber auch ein entsprechend anderer Trigger. Let’s Encrypt Zertifikate sind 3 Monate lang gültig, man könnte also alle 2 Monate das Zertifikat tauschen und hat dann noch genug Zeit zu reagieren, falls etwas schief geht.
Als Aktion wird dann einfach das Script ausgelöst. Pfad zur Powershell:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Als Argument wird der Pfad zum Script angegeben, in meinem Fall „C:\CertificateAssistant\CertificateAssistant.ps1“
Ich werde nun noch etwas weiter am Script basteln und Testumgebungen für Exchange 2010 und Exchange 2013 installieren.
Update 04.03.2018
Ich habe gerade eine neue Version hochgeladen. Jetzt mit Support für Exchange 2013 und Server 2012 R2. Siehe hier:
Certificate Assistant jetzt auch für Exchange 2013 und Server 2012 R2