Möchte man Windows-Systeme mit Zertifikaten ausrüsten, welche nicht die Möglichkeit haben, direkt mit einer Active Directory integrierten Zertifizierungsstelle zu kommunizieren, oder die sich gar überhaupt nicht in der gleichen Active Directory Gesamtstruktur befinden, bleibt in den meisten Fällen nur die manuelle Installation von Zertifikaten.
Seit Windows 8.1 / Windows Server 2012 R2 befindet sich jedoch ein integrierter Client für das Simple Certificate Enrollment Protocoll (SCEP) an Bord. Serverseitig wird SCEP über den Registrierungsdienst für Netzwerkgeräte (Network Device Enrollment Service, NDES) in der Microsoft-PKI seit Windows Server 2003 implementiert.
Eine besonders interessante Eigenschaft von SCEP ist, dass das Protokoll eine Erneuerung eines Zertifikats unter Angabe eines bereits vorhandenen erlaubt. Was läge also näher, als diese Schnittstelle zu verwenden? Was noch fehlt, ist eine entsprechende Automatisierung über die Windows PowerShell.
Der Registrierungsdienst für Netzwerkgeräte (Network Device Enrollment Service, NDES) bietet eine Möglichkeit, Geräten, welche nicht über eine Kennung im Active Directory verfügen (beispielsweise Netzwerkgeräte wie Router, Switches, Drucker, Thin Clients oder Smartphones und Tablets), Zertifikate von einer Zertifizierungsstelle zu beantragen. Für eine detailliertere Beschreibung siehe Artikel "Grundlagen Registrierungsdienst für Netzwerkgeräte (Network Device Enrollment Service, NDES)".
Um mit der Windows PowerShell die Beantragung der benötigten One-Time Passwörter (OTP) und die anschließende Zertifikatbeantragung zu automatisieren habe ich das PowerShell Modul "PSCertificateEnrollment" geschrieben und auf GitHub und der PowerShell Gallery bereitgestellt.
Das PowerShell Modul funktioniert ausschließlich auf Windows 8.1 bzw. Windows Server 2012 R2 oder neuer. PowerShell Core und Linux werden nicht unterstützt.
Zunächst muss das Modul auf dem System installiert und geladen werden.
Import-Module PSCertificateEnrollment
Beantragen eines Einmalkennwortes für die anschließende Zertifikatbeantragung
Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken, um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.
Der Befehl "Get-NDESOTP" würde üblicherweise auf einer Managementworkstation oder einem Managementserver ausgeführt.
Ruft man den Befehl unter Angabe des Computernamens auf, wird eine Authentifizierung an der NDES-Administrations-Webseite vorgenommen und das zurückgegebene Einmalpasswort ausgegeben.
Get-NDESOTP -ComputerName "ndes.adcslabor.de"
Die Verbindung wird auf diese Weise mit SSL hergestellt. Dies erfordert jedoch zwingend, dass der Parameter -ComputerName identisch zur im SSL-Zertifikat des NDES Server hinterlegten Identität angegeben wird.
Auf diese Weise wäre es auch leicht möglich, mehrere Einmalpasswörter auf einmal zu beantragen.
Bei mehrfacher Beantragung bitte die Anzahl der gleichzeitig im Umlauf befindlichen Passwörter entsprechend konfigurieren.
Optional: Anmelden unter Angabe von Benutzername und Kennwort
In der Standardeinstellung wird die Identität des angemeldeten Benutzers für die Anmeldung am NDES-Server verwendet. Die Anmeldung unter Angabe von Benutzername und Kennwort ist über den -Credential Schalter implementiert, welcher ein PSCredential Objekt (erstellen mit Get-Credential) erwartet.
Optional: Verwendung von SSL deaktivieren (nicht empfohlen)
Die Verwendung von SSL kann durch den Schalter -NoSSL abgeschaltet werden, sollte dies erforderlich sein.
Die Verwendung von SSL wird für die Beantragung von Einmalpasswörtern dringend empfohlen, um die verwendeten Anmeldedaten zu schützen.
Beantragen des Zertifikats über den NDES-Server
Bei der Beantragung eines Zertifikats über SCEP hat der Antragsteller volle Kontrolle über die im Zertifikat enthaltene Subject Information. Somit sollte diese nur in kontrollierten Umgebungen verwendet werden, oder die Zertifikatbeantragung via SCEP nur für die komfortable Erneuerung von Zertifikaten (siehe weiter unten) verwendet werden.
Die Beantragung des Zertifikats erfolgt in der Standardeinstellung im Benutzerkontext. Über den Schalter -MachineContext kann aber ein Zertifikat auch für das Computerkonto beantragt werden. In diesem Fall muss der Befehl jedoch mit Administrator-Rechten (Run as Administrator) ausgeführt werden.
Auf dem Zielsystem kann unter Angabe des zuvor beantragten One-Time-Passworts nun die Beantragung eines Zertifikats mit dem Befehl "Get-NDESCertificate" durchgeführt werden.
Get-NDESCertificate ` -ComputerName "192.168.1.136" ` -Upn "Administrator@intra.adcslabor.de" ` -ChallengePassword "BDE00774A789610F"
Optional: SSL verwenden
Im Gegensatz zur Beantragung des Einmalkennworts wird für die Beantragung des Zertifikats in der Standardeinstellung kein Secure Sockets Layer (SSL) verwendet, da die übertragenen Daten durch das SCEP-Protokoll ausreichend geschützt sind (siehe Artikel "Grundlagen Registrierungsdienst für Netzwerkgeräte (Network Device Enrollment Service, NDES)").
Sollte es erforderlich sein, kann der Schalter -UseSSL verwendet werden, um eine Verbindung mit SSL herzustellen.
Erneuerung des Zertifikats
Die Beantragung eines Zertifikats mit Authentifizierung durch ein bereits vorhandenes Zertifikat ist ebenfalls möglich. Zuerst muss das alte Zertifikat in eine Variable (Datentyp X509Certificate2) gespeichert werden.
$OldCert = Get-ChildItem -Path Cert:\CurrentUser\my\09D57E727FE4BEC786E46D26C08321C139173E4C
Anschließend kann es als Signatur-Zertifikat für die Beantragung eines neuen Zertifikats angegeben werden.
Die Subject-Information (Subject und Subject Alternative Name) wird aus dem alten Zertifikat ausgelesen und in den Zertifikatantrag für das neue Zertifikat übernommen. Die Informationen können in diesem Modus nicht konfiguriert werden. Auf diese Weise ist gewährleistet, dass die Subject-Information identisch zum vorigen Zertifikat ist und somit vom NDES-Server akzeptiert wird. Aus diesem Grund können diese Informationen auch nicht angegeben werden, wenn der Erneuerungs-Modus verwendet wird.
$OldCert | Get-NDESCertificate -ComputerName "192.168.1.136"
Eine Erneuerung des Zertifikats unter Verwendung des vorigen Zertifikats kann auch mit den eingebauten Werkzeugen vorgenommen werden.
Fazit
Die Beantragung von Einmalkennwörtern und Zertifikaten via NDES kann beispielsweise für eine Cloud-Automatisierung verwendet werden, um Systeme ohne Domänenmitgliedschaft automatisch mit Zertifikaten auszurüsten.
Mit der Möglichkeit, Zertifikate unter Angabe eines bereits bestehenden Zertifikats zu beantragen kann auch die Erneuerung manuell beantragter Webserver-Zertifikate deutlich vereinfacht werden.
Weiterführende Links:
- Authentifizierung am Registrierungsdienst für Netzwerkgeräte (NDES) mit einem existierenden Zertifikat (Renewal-Modus)
- Grundlagen Registrierungsdienst für Netzwerkgeräte (Network Device Enrollment Service, NDES)
- Den Registrierungsdienst für Netzwerkgeräte (NDES) ohne Enterprise Administrator Berechtigungen installieren
Externe Quellen
- Sleepw4lker / PSNDESEnrollment (GitHub)
13 Gedanken zu „Zertifikatbeantragung für Windows-Systeme über den Registrierungsdienst für Netzwerkgeräte (NDES) mit Windows PowerShell“
Kommentare sind geschlossen.