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
Zertifikat erstellen mit New-SelfSignedCertificate
Selbstsignierte Zertifikate automatisch erstellen
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.

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.

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