Comment fournir un certificat de serveur vérifié pour les connexions Bureau à distance (RDP) à Windows 10

15

Nous avons une machine Windows 10 Pro dans notre bureau qui a un port ouvert vers Internet pour les connexions entrantes au bureau à distance (un «hôte»). Il est bien protégé par un mot de passe complexe et un nombre limité de tentatives autorisées et uniquement TLS 1.1 ou supérieur, mais il ne présente pas de certificat SSL vérifié en externe, uniquement celui auto-généré auto-signé fourni par Remote Desktop Services, et ce nous pose deux problèmes:

  1. Nous ne pouvons pas être totalement confiants lors de la connexion à distance, nous nous connectons vraiment à cette machine et non à une connexion détournée.
  2. Notre site échoue au contrôle de conformité PCI-DSS 3.1 (obligatoire car nous utilisons là un appareil de carte de débit / crédit au point de vente qui se connecte via Internet). La vérification signale des erreurs fatales sur ce port de bureau distant accessible sur Internet: «Certificat auto-signé SSL» et «Certificat SSL avec un nom d'hôte incorrect».

Comment puis-je obtenir une machine Windows 10 Pro (ou Windows 7/8 / 8.1 Pro) agissant en tant que serveur / hôte pour présenter un certificat SSL approprié pour la vérification du Bureau à distance?

gogoud
la source
1
Vous pouvez soit placer le certificat auto-signé dans le magasin de certificats, de chaque machine qui se connectera à cette machine, de cette façon seul ce certificat auto-signé est approuvé. Vous pouvez également obtenir le certificat signé par une autorité de certification et par défaut, car l'autorité de certification est approuvée, le certificat que l'hôte souhaite utiliser sera approuvé. Vous ne pourrez pas résoudre vos problèmes de conformité PCI-DSS 3.1 à moins d'obtenir un certificat signé par CA. Tu devrais faire ça.
Ramhound
Merci @Ramhound, vous avez tout à fait raison, j'ai besoin d'un certificat signé par une autorité de certification - j'en ai maintenant un.
gogoud
Liés -> serverfault.com/questions/444286/…
FreeSoftwareServers

Réponses:

16

Vous pouvez configurer cette machine hôte pour qu'elle utilise et présente ainsi votre certificat SSL (existant, acheté) vérifié en externe (les instructions fonctionnent probablement également pour Windows 8 et 8.1, peuvent ou non fonctionner pour Windows 7) (certaines parties de ce système sont basées sur Microsoft KB 2001849 ):

Tout d'abord, vous devez avoir acheté un véritable certificat SSL vérifié.

Si vous avez ce certificat dans un fichier au format pkcs12 (par exemple l'extension pfx), vous pouvez ainsi visualiser l'empreinte SHA1 en utilisant Linux ou Cygwin (vous en aurez besoin ci-dessous):

openssl pkcs12 -in mysite.pfx -nodes|openssl x509 -noout -fingerprint

Alternativement, si vous avez les fichiers de certificats individuels sur votre serveur Linux à / etc / ssl (/etc/ssl/certs/mysite.crt, /etc/ssl/mysite.ca-bundle et /etc/ssl/private/mysite.key ) vous pouvez créer un fichier pfx et obtenir ainsi l'empreinte SHA1:

  1. Créez un fichier pfx pour votre certificat, si vous n'en avez pas déjà un (ici: mysite.pfx) - définissez un bon mot de passe lorsque demandé:

    sudo openssl pkcs12  -export -out mysite.pfx -inkey /etc/ssl/private/mysite.pem -in /etc/ssl/certs/mysite.crt -certfile /etc/ssl/mysite.ca-bundle
    
  2. Déplacez ou copiez ce fichier pfx selon les besoins afin qu'il soit accessible par votre ordinateur hôte Windows.

  3. Voir l'empreinte SHA1 de la clé (vous en aurez besoin ci-dessous):

openssl x509 -in /etc/ssl/certs/mysite.crt -noout -fingerprint

Importez le fichier au format pkcs12 (par exemple pfx) dans le magasin de certificats personnels de la machine hôte Windows:

  1. Démarrer> Exécuter> mmc
  2. Fichier> Ajouter Supprimer le composant logiciel enfichable> Certificats> Ajouter> Compte d'ordinateur> Ordinateur local> OK
  3. Dans la fenêtre de gauche, cliquez avec le bouton droit sur Certificats (ordinateur local) Personnel, choisissez Toutes les tâches / Importer…
  4. Localisez le fichier pfx et importez-le, je suggère que pour des raisons de sécurité, vous ne le rendiez pas exportable.
  5. En développant vos personnels / certificats, vous devriez maintenant voir 3 certificats, dont l'un est votre certificat de site (par exemple mysite.com). Faites un clic droit sur ce certificat de site et faites un clic droit, choisissez Toutes les tâches / Gérer les clés privées…
  6. Ajoutez l'utilisateur 'NETWORK SERVICE' avec une autorisation de lecture uniquement (pas un contrôle total), puis appliquez
  7. Fermer mmc

Utilisez regedit pour ajouter une nouvelle valeur binaire appelée SSLCertificateSHA1Hash à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. La valeur dont il a besoin est l'empreinte digitale SHA1 du certificat obtenu ci-dessus: cliquez avec le bouton droit sur la nouvelle valeur, choisissez Modifier, puis saisissez les codes hexadécimaux séquentiellement (sans deux-points ni espaces ni virgules, les lettres ne sont pas sensibles à la casse) - il y a 20 paires hexagonales en tout (40 caractères).

Vous devrez peut-être redémarrer la machine hôte ou redémarrer les services Bureau à distance (à partir de Services.msc) avant que cela ne fonctionne.

Maintenant, après avoir établi une connexion de bureau à distance à cet hôte en utilisant le nom de site correct (par exemple mysite.com), vous devriez voir un cadenas verrouillé sur le côté gauche de la barre de connexion supérieure: cliquer sur ceci montre que l'identité de la télécommande l'ordinateur a été vérifié. Un port ouvert depuis Internet vers cet hôte devrait maintenant passer le test de nom d'hôte PCI-DSS 3.1.

gogoud
la source
Je voudrais vous voter plusieurs milliers de fois. Cela fonctionne à 100%
Shockwaver
9

Voici les étapes de base que j'utilise:

Obtenez un certificat valide pour l'hôte (il ne doit pas provenir d'une autorité de certification externe, mais toutes vos machines doivent y faire confiance). Assurez-vous qu'il a le nom d'hôte correct, j'ai eu des problèmes avec les certificats génériques.

Installez le certificat sur l'hôte, comme:

certutil.exe -p myPassword -importPFX c:\mycert.pfx noExport

recherchez l'empreinte du certificat, dans l'interface utilisateur ou dans PowerShell:

$tp = (ls Cert:\LocalMachine\my | WHERE {$_.Subject -match "something unique in your certs subject field" } | Select -First 1).Thumbprint

Dites maintenant à Remote Desktop d'utiliser ce certificat:

& wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="$tp" 

aucun redémarrage requis

Peter Hahndorf
la source
Mon certificat SSL générique fonctionnait bien, mais je devais toujours ouvrir MMC et ajouter une autorisation de service réseau, sinon cela ne fonctionnerait pas.
FreeSoftwareServers du
J'ai pu importer des certificats génériques sur "Windows 10" ainsi que "Windows Server 2016" avec un problème que Windows Server n'a pas certutil.exe. Ce n'est pas un gros problème car vous pouvez importer manuellement le mycert.pfx dans le magasin de certificats. Je n'ai pas eu à ouvrir MMC et je n'ai pas ajouté d'autorisation de service réseau.
TMT
1

Mon cert est livré avec 2 fichiers nécessaires, domain.crt& domain.ca-bundleet j'ai mon domain.keyde générer la demande.

Voici comment je l'ai configuré à l'aide d'une machine virtuelle Linux pour combiner les certificats et générer l'empreinte digitale et le CMD Windows pour configurer l'hôte. Cela permet un script complet de l'installation.

Les plus grandes différences entre la mienne et la réponse @gogoud sont:

  • Je ne modifie pas le registre. J'ai essayé cela et cela n'a pas fonctionné, j'utilise wmic /namespace:via l'invite CMD.
  • J'ai adapté la ligne «d'empreinte digitale» sur la machine virtuelle Linux pour supprimer toutes les parties inutiles de l'empreinte numérique et la mettre au format souhaité par Windows. (IE: Pas de deux-points, pas de mots, juste l'empreinte digitale avec des lettres minuscules).
  • J'ai également écrit des scripts pour ajouter des NETWORK SERVICEautorisations.

Créez un répertoire dans lequel travailler et déplacez-y les 3 fichiers:

domain.ca-bundle  domain.crt  domain.key 

Créer une clé de format pfx:

sudo openssl pkcs12  -export -out domain.pfx -inkey *.key -in *.crt -certfile *.ca-bundle

Exporter SSLCertificateSHA1Hash / FingerPrint vers un fichier TXT:

sudo openssl x509 -in *.crt -noout -fingerprint | sed -e 's/SHA1 Fingerprint=//g' | sed -e 's/://g' | tr '[:upper:]' '[:lower:]' > SSLCertificateSHA1Hash.txt

Importer un certificat dans Windows (invite CMD élevée élevée):

  • Cela peut être davantage scripté via le commutateur "-p MyPassword"

    certutil.exe -importpfx C:\domain.pfx
    

Maintenant, ajoutez SSLCertificateSHA1Hash à RDP-Tcp via CMD (Elevated CMD Prompt):

set /p FingerPrint=<C:\SSLCertificateSHA1Hash.txt
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%FingerPrint%"

Vous devrez ajouter l'utilisateur "Service réseau" avec les autorisations "Lecture seule" maintenant:

icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\*" /grant "NETWORK SERVICE":R

Redémarrez l'hôte:

 shutdown /r /t 5
FreeSoftwareServers
la source