La version de Windows Server 2012 a donc supprimé de nombreux anciens utilitaires de configuration liés au Bureau à distance. En particulier, il n'y a plus d'utilitaire Configuration de l'hôte de session Bureau à distance qui vous a donné accès à la boîte de dialogue des propriétés RDP-Tcp qui vous permet de configurer un certificat personnalisé que le RDSH doit utiliser. À sa place est une nouvelle interface graphique consolidée Nice qui fait partie du flux de travail global "modifier les propriétés de déploiement" dans le nouveau gestionnaire de serveur. Le hic, c'est que vous n'avez accès à ce flux de travail que si le rôle des services Bureau à distance est installé (pour autant que je sache).
Cela semble être un peu un oubli de la part de Microsoft. Comment pouvons-nous configurer un certificat SSL personnalisé pour RDP sur Windows Server 2012 lorsqu'il s'exécute en mode d'administration à distance par défaut sans installer inutilement le rôle des services Bureau à distance?
Il s'avère que la plupart des données de configuration pour RDSH sont stockées dans le Win32_TSGeneralSetting
classe dans WMI dans le root\cimv2\TerminalServices
espace de noms. Le certificat configuré pour une connexion donnée est référencé par la valeur d'empreinte numérique de ce certificat sur une propriété appelée SSLCertificateSHA1Hash
.
MISE À JOUR: Voici une solution Powershell généralisée qui saisit et définit l'empreinte numérique du premier certificat SSL dans la boutique personnelle de l'ordinateur. Si votre système a plusieurs certificats, vous devez ajouter un -Filter
à la commande gci
pour vous assurer de référencer le bon certificat. J'ai laissé ma réponse originale intacte en dessous pour référence.
# get a reference to the config instance
$tsgs = gwmi -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"
# grab the thumbprint of the first SSL cert in the computer store
$thumb = (gci -path cert:/LocalMachine/My | select -first 1).Thumbprint
# set the new thumbprint value
swmi -path $tsgs.__path -argument @{SSLCertificateSHA1Hash="$thumb"}
Afin d'obtenir la valeur de l'empreinte numérique
Maintenant que vous avez la valeur d'empreinte numérique, voici une ligne unique que vous pouvez utiliser pour définir la valeur à l'aide de wmic:
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="THUMBPRINT"
Ou si PowerShell est votre truc, vous pouvez l'utiliser à la place:
$path = (Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="THUMBPRINT"}
Remarque: le certificat doit être dans le magasin de certificats "personnel" du compte d'ordinateur.
Si vous obtenez "Paramètre non valide" lorsque vous essayez la solution de Ryan, assurez-vous que vous utilisez l'invite de commande élevée (exécutée en tant qu'administrateur).
Existe-t-il un moyen pour que le serveur applique l'utilisation d'un certificat client valide? Il semble que je puisse choisir, à partir du client RDP, d'ignorer les certificats non valides. Je veux que le client ne puisse pas se connecter si le certificat n'est pas valide.
Vous avez besoin de votre domain.pfx
& l'empreinte digitale dans un fichier txt SSLCertificateSHA1Hash.txt
.
Exécutez ensuite ceci dans CMD:
pushd %~dp0
cls
::FreeSoftwareServers.com
certutil.exe -p "" -importpfx "%~dp0domain.pfx"
set /p FingerPrint=<"%~dp0SSLCertificateSHA1Hash.txt"
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%FingerPrint%"
icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\*" /grant "NETWORK SERVICE":R
shutdown /r /t 5