Secure Remote Desktop Connections with Certificates
Hallo zusammen,
Ich habe mich kürzlich mit den Remote Desktop Zertifikaten bschäftigt. Wenn man eine interne Certificate Authority (CA) hat, so ist der Empfohlene Weg in der CA ein neues Zertifikatstemplate anzulegen und dieses mit einer GPO beispielsweise an die Server zu verteilen.
Using certificates in Remote Desktop Services
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn781533(v=ws.11)
Eine gute Zusammenfassung der möglichen Szenarien gibt es hier
Remote Desktop Connection (RDP) - Certificate Warnings
https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/remote-desktop-connection-rdp-certificate-warnings/ba-p/259301
Ich gehe hier aber mal noch einen anderen weg. Schauen wir uns erstmal die Default Konfiguration an.
Grundlagen
Bei der Installation wird ein Self Signed Zertifikat angelegt und im Zertifikatsspeicher unter Local Computer\Remote Desktop\Certificates abgelegt.
Der Hash des SelfSigned Certificates ist auch unter dem folgenden Registry Key abgespeichert
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations
Das ganze kann man auch über WMI abfragen
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices | select SSLCertificateSHA1Hash
Ich habe jedoch schon ein Server Certificate mit dem FQDN in meinem Local Computer Certification Store.
Schauen wir uns mal den Thumbprint genauer an
Auch mit PowerShell lassen sich die Zertifikate im Local Machine Zweig anschauen
Get-ChildItem -Path Cert:LocalMachine\MY
Nun nutzen wir den Thumbprint um dieses Zertifikat per WMI dem RDP Service zuzuweisen
$Thumbprint = "AE2A88F63D93F7963767673EBAFFF0A2DC5D7CF9"
$path = (Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").__path
$Path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="$Thumbprint"}
Das Zertifikat ist nun auch in der Registry hinterlegt
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
Schaut man sich an, wer den Private Key lesen darf, ist danach auch der Network Service mit "Read" Berechtigung drin (das war vorher nicht der Fall - habe ich extra geprüft). Weil ja der Remote Desktop Service mit unter dem Network Service Account läuft.
Das ganze wird auch hier beschrieben
Remote Desktop listener certificate configurations
https://docs.microsoft.com/en-us/troubleshoot/windows-server/remote/remote-desktop-listener-certificate-configurations
In den Remote Desktop Settings
Sollte unbedingt Network Level Authentication (NLA) aktiviert sein.
Fügt man einen Benutzer zu den Remote Desktop Users hinzu
So landet der in der lokalen "Remote Desktop Users" Gruppe. Administratoren haben per Default RDP zugriff.
Nun muss noch der RDP Service neu gestartet werden. Aber Achtung: Das trennt die RDP Verbindung
RDP Client
Nun Verbinde ich mich mit dem RDP Client und dem FQDN auf den Server
Ach ja, in den Advanced Settings sollte die Server Authentication Warnung aktiviert sein
Man sieht nun mit dem Schloss, dass die Verbindung gesichert ist.
Klickt man auf das Schloss, so sieht man dass der Computer über Kerberos authentifiziert wurde.
Verbinde ich mich mit der IP
erhalte ich eine Zertifikatswarnung. Aber man sieht, dass das Zertifikat verwendet wird, welches ich ausgewählt und dem Service zugewiesen habe.
Verbinde ich mich trotzdem, so fehlt das Schloss in der Verbindung