Kaldenhoven Wiki

Op een Windows Server of op Windows Workstations kan het certificaat voor RDP verbindingen worden vervangen. Als de server onderdeel is van een Remote Desktop Deployment kan dit niet via de GUI, maar moet een deel via de commandline gedaan worden.

Certificaat omzetten

Het certificaat moet worden geimporteerd in Windows, daarvoor moet het in DER/Binary of PFX formaat worden omgezet.
Een handige tool hiervoor is te vinden bij sslshopper. https://www.sslshopper.com/ssl-converter.html

Certificaat Importeren in Store

Start daarna op de windows server de certificaat manager.
mmc -> add Snap In -> Certificates -> Computer account -> Local Computer -> OK.
Open Personal -> Certificates en importeer het certificaat.
Open het certificaat en op het tabblad Details controleer de waarde van Thumbprint en kopieer naar kladblok. Verwijder alle spaties.

Thumbnail achterhalen kan ook via Powershell.

Get-Childitem cert:\Localmachine\My

Certificaat toekennen

Open een Command windows met Administrator rechten en voer het volgende commando uit.

wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="[Thumbprint]"

Controleer of de wijziging is doorgekomen.

wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Get SSLCertificateSHA1Hash

Herstart de service "Remote Desktop Services".

Update 2026!

Windows 11

Op Windows 11 (of 10 voor de liefhebbers) kan je ook inloggen via remote desktop, al dan niet in meerdere sessies met de RDP Wrapper. (Ga ik hier verder niet op in)

Bij deze nieuwe versie is het zo dat de bovenstaande powershell scripts niet meer goed werken. Dit zal ook voor nieuwere versies van Windows Server gelden. Daarom hieronder een script welke ook nog eens eenvoudiger is, omdat deze alles in 1 keer uitvoert.

Nadat je het certificaat hebt ingeladen kan je onderstaande script uitvoeren en zal deze controleren welk certificaat het meest recent is en deze activeren zonder dat de remote desktop services herstart hoeven te worden.

Get-ChildItem Cert:\LocalMachine\My |
Where-Object {
    $_.HasPrivateKey -and
    $_.NotAfter -gt (Get-Date) -and
    $_.EnhancedKeyUsageList.ObjectId -contains "1.3.6.1.5.5.7.3.1"
} |
Sort-Object NotAfter -Descending |
Select-Object -First 1 |
ForEach-Object {
    Get-CimInstance -Namespace root\cimv2\terminalservices `
        -ClassName Win32_TSGeneralSetting `
        -Filter "TerminalName='RDP-tcp'" |
    Set-CimInstance -Property @{
        SSLCertificateSHA1Hash = $_.Thumbprint.Replace(" ","")
    }
}

Het controleren werkt nog wel met het commando welke bovenaan deze pagina staat.

Get-CimInstance -Namespace root\cimv2\terminalservices `
  -Class Win32_TSGeneralSetting |
Select TerminalName, SSLCertificateSHA1Hash