Tags: Zertifikate, PowerShell, DNS
Let's Encrypt betreibt eine freie und mittlerweile sehr populäre CA für SSL-Zertifikate. Deren größte Einschränkung besteht in der Gültigkeit von nur 90 Tagen. Daher wird man das Verlängern und Installieren der Zertifikate möglichst automatisieren. Der ACME2-Client für Windows bietet entsprechende Funktionen.
In einem früheren Artikel zu Lets Encrypt habe ich gezeigt, wie man Zertifikate für die Absicherung von IIS und Exchange anfordern kann. Zu diesem Zeitpunkt unterstützte der Windows-Client von Tinus Wouter erst die Version 1 des ACME-Protokolls, seit einiger Zeit aber nun auch ACME 2 (Download von win-acme 2). Damit lässt sich das Management von Zertifikaten weitgehend automatisieren.
Client entpacken und starten
Den Client kann man nach dem Herunterladen in ein beliebiges Verzeichnis auf dem Server entpacken. Der Speicherort sollte danach allerdings nicht mehr verändert werden, da dieser für die Rezertifizierung wichtig sein kann.
Wie die frühere Version handelt es sich bei der aktuellen Ausführung um ein Menü-geführtes Programm für die Kommandozeile, so dass es sich etwa auch unter Server Core ausführen lässt. Es wird über den Aufruf von wacs.exe gestartet.
Zertifikat über den Simple Mode anfordern
Die interaktive Anforderung eines Zertifikats über den Simple Mode funktioniert weitgehend gleich wie in der alten Version. In unserem Beispiel führe ich das Programm auf einem Windows Server 2019 aus, auf dem die IIS-Rolle läuft.
Für die Verifizierung der Domäne habe ich die Bindung am IIS konfiguriert wie aus der folgenden Abbildung ersichtlich.
Nach dem Start von win-acme wählt man die Option N, um ein Zertifikat mit den Standardeinstellungen zu erzeugen. Dabei sucht das Tool nach den Bindungen im IIS. Sind diese nicht konfiguriert, dann bricht der Vorgang ab.
Im nächsten Schritt wählt man die IIS-Website aus, für die man das Zertifikat anfordern möchte.
Anschließend entscheidet man sich, ob alle Bindungen oder nur bestimmte genommen werden sollen. Im zweiten Fall wählt man diese über einen Filter aus.
Nach einer weiteren Bestätigung startet die Zertifikatsanforderung. Um den Besitz der Domäne zu verifizieren, nutzt das Programm die Methode http-01. Dabei erhält der Client von Let's Encrypt ein Token, das er in eine Datei auf dem lokalen Server schreibt und die nachher von Let's Encrypt ausgelesen wird.
Im unten stehenden Screenshot scheitert die Anforderung, weil die Freigabe für Port 80 auf der Firewall fehlt. Let's Encrypt möchte nämlich den Token über HTTP aus der Datei erfassen.
Das Zertifikat findet sich nach dem erfolgreichen Abschluss des Vorgangs erwartungsgemäß im Zertifikatsspeicher des anfordernden Servers. Zusätzlich legt es der Client unterC:\ProgramData\win-acme\acme-v02.api.letsencrypt.org
im PEM-und PFX-Format ab.
Optionen zur Validierung der Domäne
Den Besitz an der Domäne, für die man ein Zertifikat anfordert, muss man nicht nur bei der Erstausstellung nachweisen, sondern anschießend alle 3 Monate für die Erneuerung des Zertifikats.
In der Regel ist es aber nicht erwünscht, dass ein Server nur für die Anforderung eines Zertifikates ohne Schutz dauerhaft auf Port 80 aus dem Internet erreichbar ist. Hier könnte man den Einsatz eines Proxys oder einer zeitweiligen Portfreigabe erwägen.
Geht es nur um wenige Server, dann könnte der jeweilige Administrator die Verlängerung auf Termin legen und das Zertifikat manuell erneuern. In der Regel wird man aber eher versuchen, den ganzen Vorgang zu automatisieren.
Diesem Vorhaben kommt win-acme schon bei der Anforderung entgegen, indem es eine geplante Aufgabe für die Erneuerung des Zertifikats einrichtet,.
Um die periodische Öffnung der Firewall auf Port 80 zu umgehen, bietet es sich an, statt http-01 eine andere Challenge zu wählen. In Frage kommt dabei vor allem DNS-01, bei dem das Token als TXT-Record in das DNS eingetragen wird.
Diese Methode hat zudem den Vorteil, dass man damit Wildcard-Zertifikate ausstellen kann. Voraussetzung für DNS-01 ist natürlich, dass die betreffende Domäne außer Haus gehostet wird und somit für Let's Encrypt zugänglich ist.
Für die Automatisierung des DNS-Eintrags gibt es eine Reihe von Plugins für win-acme, die für unterschiedliche Domain-Hoster wie Azure, Cloudflare oder Routre 53 von AWS ausgelegt sind.
Installation der Zertifikate
Wenn man die Erneuerung der Zertifikate alle 90 Tage automatisiert hat, bleibt mit der Installation noch ein weiterer Schritt für den vollständigen Abschluss der Aufgabe. Dieser ist umso aufwändiger, je mehr Dienste man mit den Zertifikaten ausstatten möchte. In der Praxis sind das neben den IIS oder Exchange auch Remote Desktop Services, Proxys usw.
Während der Client das Zertifikat für die IIS automatisch einrichtet, erfordern andere Dienste dafür eigene Prozeduren. Aus diesem Grund erlaubt win-acme 2 die automatische Ausführung von Scripts (.bat, .ps1) oder auch .exe-Dateien direkt nach der erfolgreichen Ausstellung eines Zertifikats.
Das Tool bringt eine Reihe solcher Scripts mit, unter anderem für den Import von Zertifikaten in diverse RDS-Komponenten, Load Balancer von Kemp, ADFS oder Exchange. Für Letzteres kann man auch ExchangeLetsEncrypt.ps1 aus dem vorangegangenen Artikel nutzen, um das Zertifikat zu importieren und an die verschiedenen Dienste zu binden.
Ich empfehle, die Scripts vor dem Einsatz auf produktiven Systemen zuerst auf einer Testumgebung auszuprobieren. Sonst sind im schlimmsten Fall bei einem Fehler wichtige Dienste nicht mehr für die Benutzer erreichbar.
Täglich Know-how für IT-Pros mit unserem Newsletter
Roland Eich ist gelernter Fachinformatiker für Systemintegration und in der IT seit über 14 Jahren zu Hause. Roland deckt aufgrund seiner Erfahrungen ein breites Spektrum der Microsoft-Produktpalette ab.Zudem besitzt er verschiedene Zertifizierungen (MCITP, MCSA und MCSE, ITIL, PRINCE2).
// Kontakt: E-Mail //
Verwandte Beiträge
Weitere Links