aethercert
Dokumentation

WinRM: Zertifikat des HTTPS-Listeners austauschen

Zertifikat des WinRM-HTTPS-Listeners (Port 5986) austauschen: Anforderungen, Fingerabdruck mit Set-WSManInstance setzen, Fehler 0x80338115 beheben, Remoting erhalten.

WinRM über HTTPS lauscht standardmäßig auf TCP 5986. Der HTTPS-Listener speichert den Fingerabdruck des Zertifikats und den Hostnamen selbst. Ein neu importiertes Zertifikat ändert deshalb nichts an dem, was PowerShell-Remoting ausliefert - der Listener muss darauf umgestellt werden.

Voraussetzungen

  • Sorgen Sie für einen Zugang, der nicht vom HTTPS-Listener abhängt: eine lokale oder VM-Konsole, Out-of-Band-Management (iLO, iDRAC) oder den WinRM-HTTP-Listener auf Port 5985. Testen Sie ihn vorher. Ein falscher Fingerabdruck oder Hostname legt den HTTPS-Listener lahm, und eine Remotesitzung darüber kann sich nicht selbst reparieren.
  • Microsofts Anforderungen an das Zertifikat:
    • unter Zertifikate (Lokaler Computer) > Eigene Zertifikate, mit privatem Schlüssel,
    • Serverauthentifizierung in der erweiterten Schlüsselverwendung,
    • der Hostname des Listeners im CN oder exakt als einer der SANs,
    • nicht abgelaufen, nicht gesperrt und nicht selbstsigniert.

Zertifikat Schritt für Schritt austauschen

  1. Aktuellen Listener anzeigen und seine Einstellungen notieren, vor allem den CertificateThumbprint - Sie brauchen ihn für einen Rollback:

    winrm enumerate winrm/config/listener
    Get-ChildItem WSMan:\localhost\Listener
  2. PFX-Datei neben dem alten Zertifikat in den Speicher Eigene Zertifikate des lokalen Computers importieren und den neuen Fingerabdruck auslesen:

    $cert = Import-PfxCertificate -FilePath C:\secure\server.pfx `
      -CertStoreLocation Cert:\LocalMachine\My -Password (Read-Host -AsSecureString)
    $cert.Thumbprint
  3. Den vorhandenen HTTPS-Listener auf das neue Zertifikat umstellen:

    $selector = @{Address="*";Transport="HTTPS"}
    $values = @{Hostname="server.example.com";CertificateThumbprint="<fingerabdruck>";Port="5986"}
    Set-WSManInstance -ResourceURI winrm/config/Listener -SelectorSet $selector -ValueSet $values

    Behalten Sie Adresse, Hostname und Port bei, die der Listener in Schritt 1 gezeigt hat; Hostname muss ein Name im Zertifikat sein. Gibt es noch keinen HTTPS-Listener, legt New-WSManInstance mit denselben Werten einen an, oder Sie führen winrm quickconfig -transport:https aus, das selbst ein passendes Zertifikat wählt.

  4. Bevor Sie Ihre aktuelle Sitzung schließen, öffnen Sie eine zweite Verbindung über HTTPS (siehe Prüfen). Erst wenn sie funktioniert, schließen Sie die erste. Der WinRM-Dienst braucht keinen Neustart. Haben Sie auch den Port geändert, geben Sie ihn in der Windows-Firewall frei.

Neues Zertifikat prüfen

winrm enumerate winrm/config/listener
Test-WSMan -ComputerName server.example.com -UseSSL -Port 5986
Enter-PSSession -ComputerName server.example.com -UseSSL -Port 5986

Der Fingerabdruck in der Listener-Ausgabe muss zum neuen Zertifikat passen. Führen Sie die Tests von einem entfernten Client aus, der der Kette vertraut, nicht nur lokal.

Rollback

Setzen Sie den alten CertificateThumbprint aus Schritt 1 mit demselben Set-WSManInstance-Befehl - über den anderen Zugang, falls der HTTPS-Listener nicht mehr antwortet. Das setzt voraus, dass das alte Zertifikat noch im Speicher liegt und gültig ist.

Häufige Probleme

  • Fehler 0x80338115 - "Cannot create a WinRM listener on HTTPS because this machine does not have an appropriate certificate": CN oder SAN passen nicht zum Hostnamen, Serverauthentifizierung fehlt, das Zertifikat ist abgelaufen, gesperrt oder selbstsigniert, oder es liegt nicht im Speicher des lokalen Computers.
  • Mehrere passende Zertifikate sind installiert, und der Listener nutzt ein anderes als gedacht - vergleichen Sie den Fingerabdruck in winrm enumerate winrm/config/listener.
  • Der Fernzugriff ging verloren, weil der Listener über dieselbe HTTPS-Sitzung geändert wurde, ohne getesteten zweiten Zugang - reparieren Sie ihn über Konsole oder HTTP-Listener.
  • Port 5986 oder ein eigener Port ist blockiert.

Zertifikatstausch mit aethercert automatisieren

Das aethercert-Deployment-Ziel für WinRM importiert das Zertifikat und ersetzt den lokalen HTTPS-Listener mit dem konfigurierten Hostnamen und Port.

Unter Deployment-Ziele finden Sie die Felder dieser Vorlage, die Voraussetzungen auf dem Host und den Stand der Verifizierung.

Quellen

Auf dieser Seite