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:

Get-ADUser -Identity ChewDavid -Properties DistinguishedName

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 😉


Sie benötigten persönliche Unterstützung oder haben nicht die richtige Lösung für Ihr Problem gefunden?

Dieser Blog wird von mir, Jan Kappen, in seiner Freizeit betrieben, hier beschreibe ich Lösungen für Probleme aller Art oder technische Anleitungen mit Lösungsansätzen.

Die berufliche Unabhängigkeit

Ich bin seit Januar 2020 vollständig selbstständig und habe meine eigene Firma gegründet, die Building Networks mit Sitz in Winterberg im schönen Sauerland. Hier stehe ich als Dienstleister gerne für Anfragen, Support oder Projekte zur Verfügung.

Die Firma Building Networks bietet Ihnen:

  • Hilfe und Support per Telefon, Fernwartung oder persönlich vor Ort
  • Projekt-Unterstützung
  • Ausgezeichnete Kompetenz zu den Themen
    • Microsoft Hyper-V
    • Microsoft Failover Clustering & HA
    • Storage Spaces Direct (S2D) & Azure Stack HCI
    • Veeam Backup & Recovery
    • Microsoft Exchange
    • Microsoft Exchange Hybrid Infrastruktur
    • Microsoft Active Directory
    • Microsoft Office 365
    • Ubiquiti
    • 3CX VoIP PBX
    • Fortinet Network Security
    • Baramundi Software
    • ...

Ich freue mich über Ihren Kontakt, weitere Informationen finden Sie auf der Webseite meiner Firma unter Building-Networks.de

Jan

Jan Kappen arbeitet seit 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. Von September 2018 bis Dezember 2019 war Jan als Senior Network- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland angestellt. Im Januar 2020 hat er den Sprung in die Selbstständigkeit gewagt und ist seitdem Geschäftsführer der Firma Building Networks in Winterberg. In seiner Freizeit kümmert er sich um das Freifunk-Netzwerk in Winterberg und Umgebung.

3 Kommentare:

  1. Hallo Jan,
    beim ausführen kommt folgende Fehlermeldung, die acl passt:
    requestting san certificate with subject..
    active directory enrollment policy
    {23456..}
    ldap:
    Certificate Request Processor: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF)

    • Hallo Dani,
      schau mal bitte nach, ob auf dem System der “CNG Key Isolation” Dienst läuft. Falls nicht, den bitte einmal starten und nochmal probieren.
      Gruß, Jan

  2. Hallo Jan,
    danke für den Tipp. Nein die habe ich geprüft, das wars leider nicht. Im schweizer ps script stand 2048, den wert habe ich auf 4096 angepasst. Jetzt ist der eine Fehler weg dafür habe ich den neuen , nachdem write host “certreq: request created” meldet. Prompted certificate request processor: The handle is invalid. 0x80070006 (WIN32: 6 ERROR_INVALID_HANDLE) submit commanc failed. Hast Du eine Idee woran das liegen kann? Da hat Microsoft sich wieder tolles Einfallen lassen, das war so easy mit dem IIS Service vorher… Vor allem weil jetzt Browser auch noch auf 1-jährig wollen… eieieie, Danke Dir!

Schreibe einen Kommentar

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