web-dev-qa-db-fra.com

Configurer un certificat SSL personnalisé pour RDP sur Windows Server 2012 (et versions ultérieures) en mode d'administration à distance?

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?

53
Ryan Bolger

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

  1. Ouvrez la boîte de dialogue des propriétés de votre certificat et sélectionnez l'onglet Détails
  2. Faites défiler jusqu'au champ Empreinte numérique et copiez la chaîne hexadécimale délimitée par des espaces dans quelque chose comme le Bloc-notes
  3. Supprimez tous les espaces de la chaîne. Vous devrez également faire attention et supprimer un caractère non ascii qui est parfois copié juste avant le premier caractère de la chaîne. Ce n'est pas visible dans le Bloc-notes.
  4. Il s'agit de la valeur que vous devez définir dans WMI. Il devrait ressembler à ceci: 1ea1fd5b25b8c327be2c4e4852263efdb4d16af4 .

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.

81
Ryan Bolger

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).

4
David Literak

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.

0
Progger

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
0
FreeSoftwareServers