New-SelfSignedCertificate: Selbstsignierte Zertifikate ausstellen mit PowerShell

    Zertifikate mit PowerShell verwaltenWährend man früher Tools wie makecert.exe benö­tigte, um selbst­signierte Zerti­fikate aus­zustellen, kann Power­Shell diese Auf­gabe seit Windows 8 und Server 2012 mit New-SelfSignedCertificate über­nehmen. Sie lassen sich etwa für die Client- und Server-Authenti­fizierung oder die Code-Signierung ver­wenden.

    Selbst­signierte Zertifikate kommen typischer­weise in Lab- oder sonstigen kleinen Umgebungen zum Einsatz, wenn man dort über keine Windows-Domäne oder eine andere Zertifi­zierungs­stelle ein­richten möchte. Aussteller und Benutzer sind dann meist die gleiche Person oder gehören zu einer über­schaubaren Gruppe.

    Zertifikat mit Default-Werten erstellen

    Um ein Zertifikat für SSL auszustellen, kommt das Cmdlet New-SelfSignedCertificate mit wenigen Parametern aus. Ein einfacher Aufruf in einer Sitzung mit admini­strativen Rechten könnte so aussehen:

    New-SelfSignedCertificate -DnsName lab.contoso.de `
    -CertStoreLocation Cert:\LocalMachine\My

    Selbstsigniertes SSL-Zertifikat mit New-SelfSignedCertificate auf Basis der Standardeinstellungen erzeugen.

    Dieser Aufruf legt ein neues Zertifikat unter "Eigene Zertifikate" im Store für den lokalen Rechner ab, wobei das Subject auf "lab.contoso.de" lautet. Wie man anschließend mit dem Kommando

    dir Cert:\LocalMachine\my\<Thumbprint-des-Zertifikats> | fl -Property *

    feststellen kann, verfügt das neue Zertifikat standard­mäßig unter anderem über folgende Eigenschaften:

    • EnhancedKeyUsageList: {Clientauthentifizierung (1.3.6.1.5.5.7.3.2), Serverauthentifizierung (1.3.6.1.5.5.7.3.1)}
    • NotAfter: 22.03.2020 18:52:22
    • HasPrivateKey: True
    • Issuer: CN=lab.contoso.de
    • Subject: CN=lab.contoso.de

    Generiert man das Zertifikat mit den Standardwerten, dann eignet es sich für die Client- und Serverauthentifizierung.

    Ohne die Spezifizierung eines Typs eignet sich das Zertifikat für die Client- und Server­authenti­fizierung. Darüber hinaus ist es 1 Jahr gültig und hat einen privaten Schlüssel. Wie sich mit certutil zeigen lässt, ist dieser exportierbar.

    Anzeigen der Eigenschaften des neuen Zertifikats im MMC-Snapin für Zertifikate.

    Das Cmdlet stellt bei der Verwendung des Parameters DnsName ein SAN-Zertifikat aus, wobei man die Subject Alternative Names als Komma-separierte Liste angibt. Der erste davon dient dann zusätzlich als Subject und auch als Herausgeber, wenn man über den Parameter Signer kein Zertifikat zum Signieren des neuen Zertifikats spezifiziert.

    Erlaubt ist zudem die Angabe von Wildcards nach dem Muster von

    New-SelfSignedCertificate -DnsName lab.contoso.de, *.contoso.de `
    -cert Cert:\LocalMachine\My

    für das Erstellen von Wildcard-Zertifikaten.

    Erweiterte Optionen ab Windows 10 und Server 2016

    Die meisten Vorgaben für neue Zertifikate kann man durch eigene Parameter von New-SelfSignedCertificate überschreiben, allerdings erst in Windows 10 und Server 2016. Vorher kennt das Cmdlet nur die Parameter DnsName, CloneCert und CertStoreLocation.

    So verlängert man die Gültigkeit über ein Jahr hinaus durch die Angabe eines Zeitpunktes:

    New-SelfSignedCertificate -DnsName lab.contoso.de `
    -CertStoreLocation Cert:\LocalMachine\My -NotAfter (Get-Date).AddYears(2)

    Dieses Beispiel legt die Gültigkeit auf 2 Jahre fest.

    Darüber hinaus lassen sich auch andere Anwendungen für das Zertifikat definieren als die Client- und Server­authentifizierung. Der Parameter Type sieht neben dem Vorgabewert SSLServer­Authentication noch

    • CodeSigningCert
    • DocumentEncryptionCert
    • DocumentEncryptionCertLegacyCsp

    vor. Hinzu kommt noch Custom, dass alle Zwecke für ein Zertifikat aktiviert. Sie lassen sich nach­träglich über das MMC-Zertifkat-Snapin wieder einzeln abwählen.

    Wählt man als Type 'Custom', dann  erzeugt man ein Zertifikat mit allen Anwendungszwecken.

    Wenn man nicht möchte, dass der Private Key exportierbar ist, kann man das mit dem Parameter

    -KeyExportPolicy NonExportable

    erreichen.

    Zertifikat exportieren

    Möchte man das Zertifikat in eine PFX-Datei exportieren, um es etwa auf einem Web-Server für die IIS zu nutzen, dann dient Export-PfxCertificate diesem Zweck. Es erfordert jedoch, dass man die Zieldatei absichert, entweder über ein Passwort oder mittels Zugriffs­rechten, die man über den Parameter ProtectTo festlegt.

    Nutzt man ein Kennwort, dann liest man dieses zuerst in einen Secure String ein:

    $CertPW = ConvertTo-SecureString -String "geheim" -Force -AsPlainText

    Anschließend übergibt man es im Aufruf von Export-PfxCertificate an den Parameter Password:

    Export-PfxCertificate -Cert cert:\LocalMachine\My\<Thumbprint> myCert.pfx -Password $CertPW

    Das Zertifikat spezifiziert man über den Pfad im Store und seinen Fingerabdruck.

    Selbstsigniertes Zertifikat in eine PFX-Datei exportieren

    Setzt man ein selbst­signiertes Zertifikat auf einem Server ein, dann gilt dieses den Clients als nicht vertrauens­würdig. Um die entsprechende Warnung zu unterbinden, kann man es dort in die vertrauens­würdigen Stamm­zertifizierungs­stellen importieren, entweder manuell oder über GPO.

    Zu diesem Zweck exportiert man das Zertifikat ohne Private Key im DER-codierten Format:

    Export-Certificate -Cert Cert:\LocalMachine\My\<Thumbprint> -FilePath MyCert.cer

    Als Namensendung für eine solche Export­datei verwendet man unter Windows üblicherweise ".cer".

    Keine Kommentare