aethercert
Dokumentation

RDP-Zertifikat unter Windows Server ändern

Zertifikat des RDP-Listeners eines einzelnen Windows-Servers ändern: SSLCertificateSHA1Hash per PowerShell/WMI oder Registry setzen, NETWORK SERVICE Schlüsselzugriff geben, prüfen.

Ein einzelner Remotedesktop-Listener wählt sein Zertifikat per SHA-1-Fingerabdruck aus dem Speicher Eigene Zertifikate des lokalen Computers. Das ist etwas anderes als die Rollenzertifikate einer vollständigen Remotedesktopdienste-Bereitstellung, die über den RD-Verbindungsbroker zugewiesen werden - dafür siehe die Anleitung zu den Remotedesktopdiensten.

Voraussetzungen

  • Halten Sie einen zweiten Zugang bereit (Konsole oder einen anderen Fernzugriff), falls der Listener falsch konfiguriert wird.
  • Besorgen Sie eine PFX-Datei mit privatem Schlüssel, der EKU Serverauthentifizierung und dem FQDN des Servers im SAN.
  • Notieren Sie den aktuellen Fingerabdruck (siehe Schritt 2), um zurückwechseln zu können.
  • Prüfen Sie, ob eine Gruppenrichtlinie das Listener-Zertifikat verwaltet - Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Security > Server authentication certificate template. Ein per Richtlinie erzwungenes Zertifikat überschreibt eine lokale Einstellung.
  • Verwenden Sie für die Befehle unten Windows PowerShell 5.1 (powershell.exe). Die *-WmiObject-Cmdlets gibt es in PowerShell 7 (pwsh) nicht.

Zertifikat Schritt für Schritt austauschen

  1. Importieren Sie die PFX-Datei unter Zertifikate (Lokaler Computer) > Eigene Zertifikate. Der Listener läuft unter NETZWERKDIENST (NETWORK SERVICE); geben Sie diesem Konto Lesen auf den privaten Schlüssel: certlm.msc > rechte Maustaste auf das Zertifikat > Alle Aufgaben > Private Schlüssel verwalten > Hinzufügen NETWORK SERVICE > Lesen.

  2. Aktuellen Wert anzeigen, dann den neuen Fingerabdruck setzen:

    $ts = Get-WmiObject -Class Win32_TSGeneralSetting `
      -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"
    $ts.SSLCertificateSHA1Hash                       # aktueller Fingerabdruck
    
    $thumbprint = "<neuer-fingerabdruck>" -replace '[^0-9A-Fa-f]',''
    $ts | Set-WmiInstance -Arguments @{SSLCertificateSHA1Hash=$thumbprint}

    Das -replace entfernt Leerzeichen und das unsichtbare Zeichen, das der Zertifikatsdialog beim Kopieren eines Fingerabdrucks mitliefert - eine häufige Ursache für "Invalid Parameter". Derselbe Fehler erscheint, wenn das Zertifikat nicht im Speicher Eigene Zertifikate des Computers liegt.

  3. Wert zurücklesen und mit dem Zertifikat vergleichen:

    (Get-WmiObject -Class Win32_TSGeneralSetting -Namespace root\cimv2\terminalservices `
      -Filter "TerminalName='RDP-tcp'").SSLCertificateSHA1Hash
    Get-Item "Cert:\LocalMachine\My\$thumbprint" | Format-List Subject,NotAfter,HasPrivateKey

Neue Verbindungen nutzen das neue Zertifikat; bestehende Sitzungen laufen weiter und sind kein verlässlicher Test. Ein Neustart ist normalerweise nicht nötig - zeigen neue Verbindungen noch das alte Zertifikat, starten Sie den Dienst Remotedesktopdienste (TermService) neu, was die Sitzungen auf diesem Server beendet.

Alternative: die Registry

Microsoft dokumentiert auch, den Fingerabdruck als Binärwert in der Registry zu setzen: HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp, Wert SSLCertificateSHA1Hash (REG_BINARY) mit den Bytes des Fingerabdrucks. Die Berechtigung für NETWORK SERVICE aus Schritt 1 ist auch hier nötig. Der WMI-Weg oben ist einfacher und leichter zu prüfen.

Produktspezifische Hinweise

Diese Seite gilt für Server, deren RDP-Listener Sie einzeln verwalten - einen einzelnen Server oder den eigenen Listener eines Sitzungshosts. Die Zertifikate, die Nutzer in einer RDS-Farm sehen (Gateway, Web Access, Umleitung über den Verbindungsbroker), richten Sie in der Anleitung zu den Remotedesktopdiensten ein. Ältere Anleitungen nutzen für dieselbe Änderung wmic; wmic ist in aktuellen Windows-Versionen veraltet, nehmen Sie PowerShell.

Neues Zertifikat prüfen

Öffnen Sie mit mstsc.exe eine neue Verbindung über den FQDN im SAN. Klicken Sie im Vollbild auf das Schloss in der Verbindungsleiste > Zertifikat anzeigen > Details und vergleichen Sie den Fingerabdruck mit dem gesetzten Wert. Testen Sie von einem Client, der der vollständigen Kette vertraut; es darf keine Zertifikatswarnung erscheinen.

Rollback

Setzen Sie SSLCertificateSHA1Hash mit demselben Befehl auf den alten Fingerabdruck zurück. Behalten Sie altes Zertifikat und Schlüssel, bis mehrere neue Verbindungen geklappt haben.

Hat der Server vorher sein selbstsigniertes Zertifikat verwendet, liegt dieses im Speicher Remote Desktop des Computers; setzen Sie dessen Fingerabdruck, um zurückzukehren:

Get-ChildItem 'Cert:\LocalMachine\Remote Desktop' | Format-Table Thumbprint,Subject,NotAfter

Häufige Probleme

  • Das Zertifikat liegt im Speicher des aktuellen Benutzers oder hat keinen privaten Schlüssel.
  • Ein unsichtbares Zeichen wurde in den Fingerabdruck kopiert.
  • NETWORK SERVICE kann den privaten Schlüssel nicht lesen.
  • Der Client verbindet sich per IP-Adresse, das Zertifikat enthält aber nur einen DNS-Namen.
  • Eine Gruppenrichtlinie ersetzt die lokale Listener-Einstellung.

Zertifikatstausch mit aethercert automatisieren

Das aethercert-Deployment-Ziel für RDP/RDS-Listener importiert das Zertifikat und aktualisiert den WMI-Fingerabdruck des lokalen Listeners. Es ist für einen einzelnen Listener gedacht, nicht für die Rollenzertifikate einer vollständigen RDS-Bereitstellung.

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

Quellen

Auf dieser Seite