Automatische Erstellung von Zertifikaten per PowerShell mit einer Windows CA

Ich benötige häufiger Zertifikate für Webserver und AD-Benutzer. Diese Zertifikate werden über eine Windows Zertifizierungsstelle erstellt und genutzt, über die Active Directory erfolgt auch eine Verteilung der Stamm-Zertifikate. Die Zertifikate werden sowohl für Windows- als auch für Linux-Systeme benötigt, hinzu kommen diverse Appliances wie Firewalls, Router, Switches usw…

Damit die Erstellung möglichst einfach ist, habe ich nach einer Möglichkeit gesucht, wie die Erstellung möglichst automatisiert werden kann. Sprich: Windows PowerShell.

Die genutzten Skripte

Damit die Pflege der Skripte möglichst einfach und nachvollziehbar ist, habe ich diese in mein Github-Konto gepackt:

Github.com/Kakinger/Automate Certificate Creation

Abhängigkeiten

Webserver-Zertifikate

Damit die Erstellung von Webserver-Zertifikaten möglich ist, müssen die folgenden Abhängigkeiten erfüllt sein:

Request-Certificate.ps1

Die Erstellung passiert grundsätzlich über das Skript Request-Certificate.ps1 von Jonas, ein MVP-Kollege aus der Schweiz von der itnetX. Das Skript ist verfügbar über die folgenden Quellen:

https://gallery.technet.microsoft.com/scriptcenter/Request-certificates-from-b6a07151

https://github.com/J0F3/PowerShell

webserver.json

Die Datei webserver.json beschreibt, welche Namen und IP-Adressen in dem Zertifikat enthalten sein sollen.

Die Datei kann beliebig erweitert werden um weitere Namen und IP-Adressen. Da json sehr anfällig ist, muss das Format hier sehr genau eingehalten werden, sonst gibt es eine Fehlermeldung beim Aufruf des Skripts. Meine beliebteste Fehlerquelle: Das abschließende Komma drin gelassen…

CreateWebserverCertificate.ps1

Mit diesem Zertifikat kann das eigene Zertifikat letztendlich erstellt werden. Das Skript hat ein paar Abhängigkeiten oder Pfade, hier eine kurze Beschreibung zur Hilfe.

$Sourcefile

Dieser Parameter gibt den Pfad zur webserver.json-Datei an.

$CATemplate

Hier muss der Name der Zertifikatsvorlage eingetragen werden.

$CAName

Dies ist der Name der Zertifizierungsstelle. Der Name setzt sich zusammen aus dem Computername (FQDN) und dem Namen der Zertifizierungsstelle.

$PFX, $outCER, $outPEM und $outKEY

Diese Parameter geben an, an welchen Ort die fertigen Zertifikate exportiert werden. Dieser Pfad steht bei mir auf C:\cert.

Die Funktion Create-opensslcertificates

Damit das Skript Zertifikate als .PEM und .KEY auswirft, nutze ich OpenSSL für Windows. Falls die Software nicht installiert ist, funktioniert die Konvertierung in diese Dateitypen nicht. Innerhalb der Funktion muss der Pfad zur Datei openssl.exe angegeben werden, ich nutze hier den Standardpfad.

Benutzer-Zertifikate

Request-Certificate.ps1

Die Erstellung passiert grundsätzlich über das Skript Request-Certificate.ps1 von Jonas, ein MVP-Kollege aus der Schweiz von der itnetX. Das Skript ist verfügbar über die folgenden Quellen:

https://gallery.technet.microsoft.com/scriptcenter/Request-certificates-from-b6a07151

https://github.com/J0F3/PowerShell

user.json

In dieser Datei wird der Pfad zu dem Benutzer-Element in der Active Directory angegeben. Falls der Pfad nicht bekannt ist oder die Suche zu aufwendig ist, kann der Pfad über den folgenden Befehl ausgegeben werden:

Siehe dazu auch die Hilfe von Microsoft: https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-aduser?view=win10-ps

CreateUserCertificate.ps1

Auch hier gibt es ein paar Dinge, die beachtet werden sollten bzw. angepasst werden können.

$Sourcefile

Dieser Parameter zeigt auf die user.json-Datei. Diese liegt bei mir unter C:\tools.

$CATemplate

Hier muss der Name der Zertifikatsvorlage eingetragen werden.

$CAName

Dies ist der Name der Zertifizierungsstelle. Der Name setzt sich zusammen aus dem Computername (FQDN) und dem Namen der Zertifizierungsstelle.

Wie das Skript arbeitet

Sind im Skript keine Fehler und die Abhängigkeiten sind alle erfüllt, wird innerhalb von wenigen Sekunden ein neues Benutzer und/oder Webserver-Zertifikat erstellt.

Die Computerkontextvorlage steht im Konflikt mit dem Benutzerkontext

Bei der Erstellung von dem Benutzer-Zertifikat wird eine Warnung ausgeworfen mit dem Text “Die Computerkontextvorlage steht im Konflikt mit dem Benutzerkontext”. Warum dies ist habe ich nicht weiter verfolgt, aber wenn man auf diese Seite kommt wegen der Suche nach dieser Warnung, dann wird es vermutlich deswegen sein, weil ich der einzige Treffer bin mit diesem Text 😉

Jan

Jan Kappen arbeitet sein 2005 in der IT. Er hat seine Ausbildung 2008 abgeschlossen und war bis 2018 als IT-Consultant im Bereich Hyper-V, Failover Clustering und Software Defined Storage unterwegs. Seit 2015 wurde er jährlich von Microsoft als Most Valuable Professional (MVP) im Bereich "Cloud & Datacenter Management" ausgezeichnet für seine Kenntnisse und die Weitergabe seines Wissens. Jan ist häufig auf Konferenzen als Sprecher zu finden, weiterhin bloggt er viel. Seit September 2018 ist Jan als Senior Network- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland angestellt. In seiner Freizeit kümmert er sich um das Freifunk-Netzwerk in Winterberg und Umgebung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.