Selbstsignierte Zertifikate mit PowerShell erstellen

()

Manchmal benötigen wir ein selbstsigniertes Zertifikat für Webseiten über HTTPS, insbesondere in Labs und zu Testzwecken, etwa um eine Web-App zu testen oder für das Intranet Portal. Dieses Tutorial zeigt hier mit Windows 11, die Vorgehensweise um einfach selbstsignierte Zertifikate in der PowerShell auszustellen und zu installieren.

Inhalt

Zuvor musste man sich mit makecert.exe behelfen welches ein Teil von Microsoft Windows SDK ist, um selbstsignierte Zertifikate auszustellen. Ab Windows 8 kann dies in der PowerShell erfolgen, so gibt es das cmdlet New-SelfSignedCertificate. Es lassen sich SSL/TLS-Zertifikate ausstellen, für die asymmetrischen Kryptografie, die Client- und Server-Authentifizierung oder die Code-Signierung.

Zertifikat erstellen mit New-SelfSignedCertificate

Öffne hierzu die PowerShell als Administrator und führe die folgenden Befehlszeilen aus.

New-SelfSignedCertificate -DnsName "localdomain.local", "dev.ops.local" -CertStoreLocation "cert:\LocalMachine\My"
$pass=ConvertTo-SecureString "pass123" -AsPlainText -force
$file="$env:temp\SelfSignedCert.pfx"
Export-PFXCertificate -cert cert:\LocalMachine\My\<Thumbprint output during first command> -file $file -Password $pass
Import-PfxCertificate -FilePath $file cert:\LocalMachine\root -Password $pass

In diesem Beispiel wird ein selbstsigniertes SSL-Serverzertifikat im Zertifikatsspeicher des Computers erstellt, wobei der alternative Antragstellername auf localdomain.local, dev.ops.local und der Antragsteller und Ausstellername auf localdomain.local festgelegt ist.

Erstellen eines neuen selbstsignierten Zertifikats mit PowerShell

  Platzhalter mit dem tatsächlichen Fingerabdruck (Thumbprint) ersetzen, der anstelle von Thumbprint output during first command eingefügt wird.

Hinweis: Lege die PowerShell-Ausführungsrichtlinie von Restricted auf RemoteSigned oder Unrestricted fest, damit lokale PowerShell-Skripts ausgeführt werden können.

PS C:\> Set-ExecutionPolicy RemoteSigned

Nach erstellen des Zertifikats wird dieses in das PFX-Format exportiert um es anschließend in den Zertifikatsspeicher zu importieren.

Das Zertifikat das gerade ausgestellt wurde, findet man jetzt im Zertifikatsmanager (CERTLM.MSC) der Microsoft Management Console (mmc) unter Vertrauenswürdige Stammzertifizierungsstellen.

Zertifikatsmanager CERTLM.MSC der Microsoft Management Console
Zertifikate Lokaler Computer: CERTLM.MSC

Selbstsignierte Zertifikate automatisch erstellen

Das Automatische Erstellen des selbstsignierten Zertifikats ohne Eingaben, weitere Aktionen sind nicht erforderlich, es wird der Computername und, falls vorhanden, der Domänenname verwendet, um das selbstsignierte Zertifikat auszustellen.

New-SelfSignedCertificate -DnsName "$env:COMPUTERNAME.$env:USERDNSDOMAIN" -CertStoreLocation "cert:\LocalMachine\My"
$pass=ConvertTo-SecureString "pass123" -AsPlainText -force
$file="$env:temp\SelfSignedCert.pfx"
$thumbprint=Get-ChildItem -Path Cert:\LocalMachine\MY | Where-Object {$_.Subject -Match "$env:COMPUTERNAME.$env:USERDNSDOMAIN"} | Select-Object Thumbprint -ExpandProperty "Thumbprint"
Export-PFXCertificate -cert cert:\LocalMachine\My\"$thumbprint" -file $file -Password $pass
Import-PfxCertificate -FilePath $file cert:\LocalMachine\root -Password $pass

Der Fingerabdruck wird in Zeile 4 in die Variable „$thumbprint“ geschrieben, um ihn dann im Export Befehl übergeben zu können.

PS C:\> Get-ChildItem -Path Cert:\LocalMachine\MY | Where-Object {$_.Subject -Match "$env:COMPUTERNAME.$env:USERDNSDOMAIN"} | Select-Object Thumbprint

Mit diesem Befehl kann das gerade erstellte selbstsignierte Zertifikat zur Überprüfung angezeigt werden.

Wenn für das Zertifikat ein bestimmter Common Name (CN) benötigt wird, kann dieses Skript ausgeführt werden. Es fordert dazu auf ein Common Name einzugeben, um das selbstsignierte Zertifikat der URL entsprechend zu erstellen.

$CommonName=Read-Host -Prompt 'Enter a Common Name (CN)'
if ($CommonName) {
	Write-Output "Self-Signed Certificate [$CommonName] processing.."
} else {
	Write-Warning -Message "Missing Common Name (CN)!"
	Break;
}
New-SelfSignedCertificate -DnsName "$CommonName" -CertStoreLocation "cert:\LocalMachine\My"
$pass=ConvertTo-SecureString "pass123" -AsPlainText -force
$file="$env:temp\$CommonName.pfx"
$thumbprint=Get-ChildItem -Path Cert:\LocalMachine\MY | Where-Object {$_.Subject -Match "$CommonName"} | Select-Object Thumbprint -ExpandProperty "Thumbprint"
Export-PFXCertificate -cert cert:\LocalMachine\My\"$thumbprint" -file $file -Password $pass
Import-PfxCertificate -FilePath $file cert:\LocalMachine\root -Password $pass

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung / 5. Anzahl Bewertungen:

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

Schreibe einen Kommentar

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