Windows-Zertifikatspeicher: Zertifikat austauschen
PFX mit Import-PfxCertificate in den Zertifikatspeicher des lokalen Computers importieren, HasPrivateKey prüfen, Zugriff auf den privaten Schlüssel erteilen und Dienste prüfen.
Der Windows-Zertifikatspeicher ist ein Ablageort, kein TLS-Endpunkt. Ein neu importiertes Zertifikat steht Windows-Diensten zur Verfügung, wird aber von IIS, RDP, SQL Server oder einer anderen Anwendung noch nicht verwendet. Jeder dieser Dienste braucht weiterhin seine eigene Bindung bzw. einen aktualisierten Fingerabdruck (Thumbprint).
Voraussetzungen
- Besorgen Sie eine PKCS#12/PFX-Datei mit dem Serverzertifikat und dem passenden privaten Schlüssel sowie das zugehörige Kennwort. Enthält die PFX-Datei die Zwischenzertifikate nicht, importieren Sie diese zusätzlich unter Zwischenzertifizierungsstellen.
- Prüfen Sie, ob das Zertifikat die nötigen DNS-SANs, die erweiterte Schlüsselverwendung (EKU), die Gültigkeit und den Schlüsselalgorithmus für den jeweiligen Dienst hat.
- Notieren Sie den Fingerabdruck des alten Zertifikats und jeden Dienst, der ihn verwendet.
- Arbeiten Sie in einer Sitzung mit erhöhten Rechten. Die meisten Serveranwendungen
benötigen
Cert:\LocalMachine\My, nicht den SpeicherCurrentUserdes angemeldeten Benutzers.
Wie Windows Zertifikate speichert
LocalMachine\My ist der Speicher Eigene Zertifikate des Computers. Der Eintrag
verweist auf einen Container für den privaten Schlüssel, der durch Windows-ACLs
geschützt ist. Ein Import als Administrator gibt einem beliebigen Dienstkonto nicht
automatisch das Recht, diesen Schlüssel zu verwenden. Private Schlüssel verwalten
im Zertifikate-Snap-In gehört deshalb bei Diensten, die nicht als Lokales System
laufen, fest zum Zertifikatstausch dazu.
Zertifikat Schritt für Schritt austauschen
-
PFX prüfen, ohne das Kennwort im Shell-Verlauf zu hinterlassen:
$pfxPath = "C:\secure\replacement.pfx" $pfxPassword = Read-Host "PFX password" -AsSecureString Get-PfxData -FilePath $pfxPath -Password $pfxPassword | Format-List EndEntityCertificates,OtherCertificates -
In den Speicher Eigene Zertifikate des lokalen Computers importieren:
$imported = Import-PfxCertificate ` -FilePath $pfxPath ` -CertStoreLocation Cert:\LocalMachine\My ` -Password $pfxPassword $thumbprint = $imported.ThumbprintVerwenden Sie
-Exportablenur, wenn ein späterer Export ausdrücklich nötig ist - der Schalter schwächt einen sinnvollen Schutz des privaten Schlüssels. -
Privaten Schlüssel und Kette prüfen:
Get-Item "Cert:\LocalMachine\My\$thumbprint" | Format-List Subject,DnsNameList,NotAfter,EnhancedKeyUsageList,HasPrivateKey,Thumbprint Export-Certificate -Cert "Cert:\LocalMachine\My\$thumbprint" -FilePath C:\Temp\new.cer certutil -verify -urlfetch C:\Temp\new.cerHasPrivateKeymussTruesein.certutil -verify -urlfetchbaut die Kette auf und prüft die Sperrung; es braucht eine Zertifikatsdatei, daher der Export. -
Läuft der Windows-Dienst unter einem eigenen Konto, öffnen Sie
certlm.msc(die Konsole für die Zertifikate des Computers), wählen Eigene Zertifikate > Zertifikate, klicken mit der rechten Maustaste auf das neue Zertifikat und wählen Alle Aufgaben > Private Schlüssel verwalten. Erteilen Sie dem Dienstkonto (bei einem virtuellen Konto wieNT SERVICE\<Dienst>genau so eintippen) nur Lesen, nicht Vollzugriff. -
Zertifikatseinstellung oder Bindung des Dienstes aktualisieren. Nutzen Sie dafür die jeweilige Anleitung für IIS, AD FS, SQL Server oder das jeweilige Produkt. Starten Sie nur das Produkt neu, dessen Anleitung das verlangt.
Cluster und Gruppenrichtlinien
Dasselbe Zertifikat kann auf mehreren Clusterknoten installiert sein, aber privater Schlüssel und Speichereintrag sind lokal pro Knoten. Importieren Sie es auf jedem Knoten, der TLS terminiert. Die Zertifikatsverteilung per Gruppenrichtlinie verteilt in der Regel öffentliche Zertifikate und Vertrauensanker - gehen Sie nicht davon aus, dass sie den privaten Schlüssel eines Servers verteilt.
Neues Zertifikat prüfen
Prüfen Sie beide Ebenen. Zuerst den lokalen Speicher wie oben. Danach eine Verbindung
zum tatsächlichen Hostnamen und Port, denn ein korrekter Speicher sagt nichts über die
aktive Bindung aus. Das Skript unten akzeptiert absichtlich jedes Zertifikat
({$true}) - es soll zeigen, was der Dienst ausliefert, nicht das Vertrauen bewerten:
$client = [Net.Sockets.TcpClient]::new("service.example.com",443)
$stream = [Net.Security.SslStream]::new($client.GetStream(),$false,({$true}))
$stream.AuthenticateAsClient("service.example.com")
[Security.Cryptography.X509Certificates.X509Certificate2]::new($stream.RemoteCertificate) |
Format-List Subject,Issuer,Thumbprint,NotAfter
$stream.Dispose(); $client.Dispose()Rollback
Der Speicher selbst braucht keinen Rollback: Das alte Zertifikat bleibt darin, bis Sie es löschen. Stellen Sie den Dienst nach der Anleitung des Produkts wieder auf den notierten alten Fingerabdruck um - etwa die Bindung im IIS - und führen Sie aus, was das Produkt dafür braucht (Reload oder Neustart). Löschen Sie den neuen Eintrag erst, wenn der Rollback bestätigt ist.
Häufige Probleme
- Die PFX-Datei wurde in
CurrentUserstatt inLocalMachineimportiert. HasPrivateKeyistFalse, weil nur eine.cer-Datei importiert wurde. Importieren Sie stattdessen die PFX-Datei. Liegt der passende Schlüssel schon auf dem Rechner, kanncertutil -repairstore my <Seriennummer>Zertifikat und Schlüssel wieder verknüpfen.- Das Dienstkonto kann den Schlüsselcontainer nicht lesen.
- Die Kette ist unvollständig oder die Stammzertifizierungsstelle ist bei den Clients nicht vertrauenswürdig.
- Das richtige Zertifikat ist installiert, die Anwendung verweist aber noch auf den alten Fingerabdruck.
Zertifikatstausch mit aethercert automatisieren
aethercert kann Zertifikat und privaten Schlüssel in den gewählten Windows-Speicher importieren. Für Produktvorlagen übernimmt es auch den unterstützten Bindungs- bzw. Zuweisungsschritt; ein reines Zertifikatspeicher-Ziel legt bewusst keine Anwendungsbindung an.
Unter Deployment-Ziele finden Sie die Felder dieser Vorlage, die Voraussetzungen auf dem Host und den Stand der Verifizierung.
Quellen
Manuelle Erneuerung
Schritt-für-Schritt-Anleitungen zum manuellen Austausch von SSL/TLS-Zertifikaten auf IIS, Exchange, AD FS, RDS, NGINX, Apache, F5, NetScaler, FortiGate, vCenter, Proxmox und mehr.
Microsoft IIS
SSL-Zertifikat im IIS austauschen: PFX mit Import-PfxCertificate importieren, HTTPS- und SNI-Bindungen umstellen, HTTP.sys verstehen und das Ergebnis prüfen.