Adam the Automator

Si vous exécutez déjà des commandes à distance avec PowerShell Remoting (PSRemoting), vous savez à quel point la fonctionnalité est pratique. Vous pouvez vous connecter à un ou plusieurs ordinateurs distants et les gérer comme s’ils étaient locaux. PSRemoting dépend de la gestion à distance de Windows (WinRM) pour y arriver, et si vous n’utilisez pas WinRM sur SSL, vous pourriez vous ouvrir à certains problèmes de sécurité.

Dans ce tutoriel pratique, vous allez apprendre à configurer Windows sur le client et le serveur pour utiliser WinRM sur HTTPS (SSL) et comment utiliser des certificats pour vous authentifier lorsque vous utilisez WinRM sur HTTPS.

Table des Matières

Prérequis

Si vous souhaitez suivre la procédure pas à pas de ce tutoriel, assurez-vous d’avoir les éléments suivants:

  • Une machine Windows 7+ ou Server 2008 R2 pour servir de machine cliente. Ce tutoriel utilisera Windows 10.
  • Une machine Windows 7+ ou Server 2008 R2+ pour servir de machine serveur. Ce tutoriel utilisera Windows Server 2019.
  • Accès à un compte d’administration local ou à un compte avec des droits d’administration locaux sur les machines client et serveur.
  • Une infrastructure à clé publique (ICP) Active Directory Certificate Services (ADCS) configurée. Cela vous aiderait si vous implémentiez des ADC pour les implémentations de production, mais c’est facultatif pour ce tutoriel et ce test. Le didacticiel supposera que l’ICP est configurée en tant qu’autorité de certification d’entreprise ou autonome.

Pourquoi utiliser WinRM sur SSL ?

PSRemoting, prêt à l’emploi, utilise WinRM et vous permet de gérer les machines clientes à distance. Une fois que PSRemoting établit une session sur WinRM, il chiffre ensuite toutes les communications du client au serveur. De plus, la procédure de configuration pour implémenter PSRemoting sans HTTPS est assez simple.

Si PSRemoting crypte déjà la communication de session, pourquoi configurer quelque chose comme des ADC et gérer les certificats alors qu’il est déjà chiffré ?

Car pendant le processus d’authentification, les informations d’identification peuvent être envoyées dans des formats non sécurisés en fonction du type d’authentification utilisé.

L’un des moyens les plus simples de sécuriser le retrait PS consiste à utiliser WinRM sur HTTPS au lieu de HTTP. HTTPS encapsule l’intégralité de votre flux de connexion, y compris l’authentification au sein de la couche de cryptage déjà utilisée par WinRM. HTTPS fournit également simultanément un moyen de valider que le serveur auquel vous vous connectez est ce que vous pensez être.

Configuration de WinRM avec un certificat auto-signé

Passons maintenant aux démonstrations. Pour la première astuce, vous allez apprendre à configurer la communication cryptée PSRemoting avec WinRM via SSL via un certificat auto-signé.

L’utilisation d’un certificat auto-signé est un excellent moyen de configurer un environnement de test sans se soucier d’une PKI comme les ADC. Lorsque vous utilisez un certificat auto-signé, vous générez un certificat que le serveur lui-même signe et qui se porte essentiellement garant de lui-même.Les certificats

existent pour effectuer deux tâches typiquement ; authentifier une connexion et la chiffrer. L’utilisation d’un certificat auto-signé n’implémente que ce dernier. Pour valider l’identité d’un serveur, vous devez toujours utiliser des certificats fournis par l’ICP. Les certificats fournis par l’ICP fournissent une source unique de confiance par rapport au fait de devoir faire confiance à chaque certificat auto-signé individuellement et manuellement.

La configuration de WinRM sur SSL avec un certificat auto-signé nécessite quatre étapes de haut niveau:

  1. Création du certificat auto-signé sur la machine de destination.
  2. Configuration du serveur Web WinRM (écouteur) du serveur pour utiliser le certificat auto-signé pour l’authentification.
  3. Ouverture des ports appropriés sur le pare-feu Windows de la machine de destination.
  4. Exécution d’une commande pour lancer une connexion distante sur le client à l’aide d’une applet de commande PowerShell telle que Enter-PSSession.

Passons maintenant en revue chacune des étapes.

Création d’un certificat auto-signé

La première étape consiste à générer un certificat auto-signé sur le serveur. Lors de la connexion, PSRemoting utilisera ce certificat pour chiffrer toutes les communications.

Sur ServerB avec une console Windows PowerShell ouverte en tant qu’administrateur, exécutez l’applet de commande New-SelfSignedCertificate comme indiqué ci-dessous. L’exécution de la commande ci-dessous génère un certificat pour ServerB.domain.com dans le magasin de certificats personnel de la machine locale.

New-SelfSignedCertificate -Subject 'CN=ServerB.domain.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'
 Création d'un certificat auto-signé.
Création d’un certificat auto-signé.

Le paramètre Subject doit être le nom de domaine complet du serveur. WinRM utilise le sujet pour valider l’identité du serveur.

Même si le serveur est dans un groupe de travail, indiquez toujours un nom de domaine, par exemple, domain.com ou labo.local. Lors de la connexion à la machine de destination, le nom DNS auquel vous vous connectez doit correspondre exactement à ce nom de sujet, la connexion échouera.

Le TextExtension vous permet de définir l’utilisation de la clé du certificat (2.5.29.37), ce qui définit à quoi le certificat peut être utilisé. Définissez l’utilisation de la clé pour l’authentification du serveur ({text}1.3.6.1.5.5.7.3.1) pour vous assurer que le certificat ne peut être utilisé que pour authentifier l’identité d’un serveur.

Après l’exécution de New-SelfSignedCertificates, il renverra l’empreinte du certificat qu’il a généré. Enregistrez ceci car vous en aurez besoin pour la commande suivante.

Configuration de l’écouteur WinRM

Une fois que vous avez créé le certificat auto-signé sur le serveur, configurez l’écouteur WinRM pour commencer à utiliser ce certificat pour l’authentification. Pour ce faire, utilisez la commande winrm create comme indiqué ci-dessous.

Le Address=* de la commande ci-dessous informe l’auditeur d’écouter toute adresse IP configurée sur le serveur. Si plusieurs adresses IP sont configurées sur le serveur, vous pouvez définir une adresse IP spécifique ici.

Assurez-vous de remplacer l’espace réservé <cert thumbprint here> par l’empreinte renvoyée à la dernière étape.

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ServerB.domain.com"; CertificateThumbprint="<cert thumbprint here>"}'
 Création d'un écouteur WinRM avec un certificat auto-signé.
Création d’un écouteur WinRM avec un certificat auto-signé.

Ouverture du port de pare-feu SSL WinRM

Ensuite, si vous utilisez le pare-feu Windows, vous devrez autoriser le trafic HTTPS entrant dans le serveur via le port HTTPS par défaut 5986.

Ouvrez le port de pare-feu pour WinRM sur HTTPS à l’aide de PowerShell en exécutant la commande ci-dessous.

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System'}New-NetFirewallRule @FirewallParam

Connexion au serveur via SSL

Vous avez maintenant configuré le serveur Windows distant pour accepter les connexions WinRM via SSL. À ce stade, revenez au client et lancez toutes les commandes PSRemoting que vous souhaitez tester. Par exemple, vous pouvez essayer l’applet de commande Enter-PSSession ou Invoke-Command . Seulement maintenant, vous vous connectez un peu différemment de la connexion HTTP par défaut.

La connexion via HTTPS nécessite généralement un seul paramètre UseSSL. Ce paramètre indique à la commande de rechercher un écouteur HTTPS WinRM par rapport à un écouteur HTTP comme par défaut. Le paramètre UseSSL est disponible sur plusieurs commandes PSRemoting.

Pour le test, exécutez Enter-PSSession en fournissant le nom de domaine complet du serveur tel que défini par le sujet du certificat auto-signé, un objet PSCredential pour définir le nom d’utilisateur et le mot de passe, et enfin, le paramètre de commutateur UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -Credential (Get-Credential) -UseSSL

Si vous exécutez la commande ci-dessus, vous recevrez un message d’erreur puisque vous avez configuré l’écouteur WinRM sur le serveur pour utiliser un certificat auto-signé. Chaque fois que le client PSRemoting tente de s’authentifier auprès du serveur, il essaie de valider le certificat, et il ne peut pas. Un certificat auto-signé n’a pas de chaîne de confiance que la commande peut suivre et échoue.

 Échec de la vérification de confiance de l'autorité de certification avec un certificat auto-signé.
Échec de la vérification de confiance de l’autorité de certification avec un certificat auto-signé.

Pour vous connecter au serveur avec un certificat auto-signé, vous devez remplacer la vérification de confiance du certificat. Vous pouvez le faire en créant une option PSSessionOption appelée SkipCACheck à l’aide de l’applet de commande New-PSSessionOption et en la passant à la commande comme indiqué ci-dessous.

$PSSessionOption = New-PSSessionOption -SkipCACheckEnter-PSSession -ComputerName ServerB -Credential (Get-Credential) -SessionOption $PSSessionOption -UseSSL

Vous pouvez définir de nombreux objets PSSessionOption différents pour ajouter des options pour votre connexion distante qui ne sont pas incluses directement dans l’applet de commande Enter-PSSession.

Essayez de vous connecter à nouveau et PowerShell devrait maintenant vous demander des informations d’identification. Une fois fourni, vous devez maintenant vous connecter au serveur avec WinRM via SSL!

Configuration de WinRM avec un certificat signé par une autorité de certification

Si vous avez l’intention d’utiliser PSRemoting à l’aide de WinRM en production et que vous souhaitez rester aussi sécurisé que possible, vous devez vous concentrer sur WinRM sur SSL à l’aide d’un certificat signé par une autorité de certification (CA).

Les certificats signés par une autorité de certification maintiennent une chaîne de confiance et sont plus sécurisés que les simples certificats auto-signés, car ils valident l’identité d’un émetteur de certificat.

Si vous êtes dans un environnement Active Directory, l’une des façons les plus courantes de configurer une autorité de certification consiste à utiliser des ADC. Avec ADCS, vous pouvez déployer des certificats sur des périphériques et configurer WinRM pour utiliser ces certificats.

Ce tutoriel va supposer que vous avez déjà configuré des ADC et que vous travaillez dans votre environnement.

Pour une configuration rapide, vous pouvez suivre la documentation de Microsoft, mais pour un déploiement en production, vous devez effectuer des recherches approfondies sur la configuration, car une autorité de certification est au centre des efforts de chiffrement d’une organisation.

Création de la demande de certificat

La première étape de l’utilisation d’un certificat émis par une autorité de certification consiste à créer le certificat. Pour créer le certificat, vous devez d’abord émettre une demande de certificat à l’aide d’une demande de signature de certificat (CSR). Une fois généré, ce CSR peut ensuite être envoyé à l’autorité de certification pour émettre le certificat.

Les étapes de cette section fonctionneront sur les déploiements ADCS lorsqu’il s’agit d’une autorité de certification d’entreprise ou d’une autorité de certification autonome. Si vous utilisez une autorité de certification d’entreprise intégrée à AD, vous pouvez accélérer l’inscription des certificats sans passer par les étapes de cette section à l’aide de l’inscription automatique des certificats ou des modèles de certificats.

Sur le serveur (ServerB dans ce tutoriel), créez le CSR:

  1. Exécutez certlm.msc pour ouvrir le gestionnaire de certificats Windows.

2. Faites un clic droit sur le magasin personnel et sélectionnez Toutes les tâches – > Opérations avancées – > Créer une demande personnalisée.

3. Pour ce tutoriel, laissez tous les champs par défaut jusqu’à ce que vous arriviez à la page d’informations sur le certificat ci-dessous. Lorsque vous arrivez ici, cliquez sur le menu déroulant Détails et sélectionnez Propriétés.

 Création d'une demande de certificat personnalisée.
Création d’une demande de certificat personnalisée.

4. Cliquez sur l’onglet Sujet et changez le type en Nom commun.

5. Entrez maintenant le nom de domaine complet du serveur s’il est joint à un domaine ou simplement le nom d’hôte s’il ne l’est pas et cliquez sur Ajouter.

 Spécification de l'objet de la demande de certificat.
Spécification du sujet de la demande de certificat.

Notez que pour une utilisation avec un écouteur SSL WinRM, vous devez utiliser le nom commun. Les autres options de la liste peuvent être incluses mais ne sont pas requises pour ce déploiement.

6. Cliquez sur l’onglet Extension.

7. Si vous n’utilisez pas l’authentification basée sur un certificat qui sera couverte ultérieurement, développez l’en-tête d’utilisation de clé étendue et ajoutez l’authentification du serveur. Ce type d’utilisation de clé indique à Windows que le certificat doit être utilisé pour authentifier un serveur. D’autres options incluent l’authentification du client, la signature de code et le cryptage des documents.

8. Si vous souhaitez configurer une authentification basée sur un certificat, assurez-vous de choisir l’authentification du client, comme indiqué ci-dessous.

 Demande d'un certificat d'authentification client.
Demande d’un certificat d’authentification client.

9. Ensuite, cliquez sur l’onglet Clé privée et remarquez les options de clé. Modifiez la taille de clé par défaut de 1024 à au moins 2048 pour renforcer la sécurité de la paire de clés.

Il existe également des fournisseurs de cryptographie plus puissants disponibles dans Windows, mais vous pouvez être confronté à une incompatibilité avec des logiciels plus anciens.

10. Fermez la fenêtre Propriétés du certificat et enregistrez vos paramètres en cliquant sur OK et cliquez sur Suivant pour continuer avec les invites.

11. Fournissez maintenant un chemin pour afficher la demande de certificat où vous pouvez la récupérer plus tard et cliquez sur Terminer.

Une fois terminé, vous devriez avoir un fichier de demande de certificat.

Demande d’un certificat

Une fois la demande créée, vous devez maintenant soumettre cette demande à votre autorité de certification, qui générera le certificat. Pour ce faire:

  1. Accédez à votre serveur ADCS à l’adresse http://<server nom FQDN >/certsrv/certrqxt.ASP.
 Page Web de soumission de demande de certificat.
Page Web de soumission de demande de certificat.

2. Ouvrez le fichier de demande de certificat créé précédemment avec le bloc-notes et copiez le texte du fichier de demande de certificat dans la zone de demande. Rien n’est requis pour les attributs supplémentaires de ce certificat.

3. Cliquez sur Soumettre. Cela soumettra votre demande à l’AC. Il devrait ensuite vous montrer l’ID de la demande, qui sera requis plus tard. Garde ça ! Tu en auras besoin plus tard.

4. Connectez-vous maintenant au serveur CA qui fait partie de votre environnement ADCS à l’aide du gestionnaire de certificats Windows sur votre ordinateur local ou via RDP en exécutant certsrv.MSC.

5. Cliquez sur Demandes en attente.

 Émission d'un certificat à partir d'une demande en attente.
Émission d’un certificat à partir d’une demande en attente.

6. Cliquez avec le bouton droit sur la demande en attente, cliquez sur Toutes les tâches et cliquez sur Problème. Cela approuvera la demande que vous venez de soumettre en fonction de l’ID de demande de l’étape précédente.

Inscription du certificat

Maintenant que vous avez émis un certificat sur l’autorité de certification, il est temps d’inscrire le certificat sur le serveur sur lequel vous configurez WinRM. Pour ce faire:

  1. Depuis le serveur sur lequel vous configurez WinRM via SSL, accédez à http://<server nom FQDN >/certckpn.ASP. Vous devriez voir une seule demande de certificat en attente.

 Affichage de l'état de la demande de certificat en attente.
Affichage de l’état de la demande de certificat en attente.

Vous pouvez récupérer le certificat public à partir d’une autre machine si nécessaire, mais à partir du serveur que vous configurez pour WinRM via HTTPS simplifie le processus.

2. Sélectionnez la demande que vous avez soumise dans la liste et téléchargez la chaîne de certificats. Vous devez télécharger toute la chaîne de certificats si le serveur que vous configurez WinRM sur HTTPS a votre autorité de certification en tant que serveur racine.

 Téléchargement de la chaîne de certificats.
Téléchargement de la chaîne de certificats.

3. Ouvrez le fichier de chaîne de certificats. Vous devriez voir un certificat pour votre serveur et tous les certificats d’autorité de certification situés plus haut dans la chaîne. Ci-dessous win2.laboratoire.int est le certificat demandé et WIN2-CA est le certificat de l’autorité de certification qui a émis le certificat pour win2.lab.int.

 Affichage des certificats à l'intérieur de la chaîne de certificats.
Affichage des certificats à l’intérieur de la chaîne de certificats.

4. Double-cliquez sur l’un des certificats et, dans la case qui s’ouvre, cliquez sur le bouton Installer le certificat. Puisque ce certificat sera utilisé par le serveur et non par un utilisateur spécifique, changez l’option en Machine locale.

 Importation du certificat dans le magasin de certificats de la machine locale.
Importation du certificat dans le magasin de certificats de la machine locale.

5. Continuez à travers l’invite en laissant tout par défaut. Les valeurs par défaut doivent placer le certificat dans le magasin de certifications racine de confiance.

6. Répétez maintenant les étapes 3 à 5 pour chacun des autres certificats de la liste. Si vous avez plusieurs certificats, assurez-vous que tous les autres certificats sont placés dans le magasin des autorités de certification intermédiaires.

Créez et configurez l’écouteur HTTPS WinRM

Maintenant que tous les certificats sont installés, il est temps de configurer WinRM sur votre serveur pour utiliser ce certificat pour l’écouteur.

Avec PowerShell ouvert sur le serveur WinRM:

  1. Exécutez la commande ci-dessous pour configurer automatiquement l’écouteur WinRM. Pour ce faire, la commande winrm recherche dans le magasin de certificats de la machine locale un certificat correspondant aux exigences de WinRM.
winrm quickconfig -transport:https

2. Le pare-feu Windows bloquera le port HTTPS WinRM de 5986 par défaut. Pour vous assurer que le pare-feu autorise le port entrant 5986, exécutez la commande PowerShell suivante:

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System' } New-NetFirewallRule @FirewallParam

Test de la connexion SSL WinRM

À ce stade, vous êtes prêt à vous connecter. En utilisant vos applets de commande PSRemoting préférées telles que Invoke-Command ou Enter-PSSession, connectez-vous au serveur et utilisez le paramètre UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -UseSSL -Credential (Get-Credential)

Assurez-vous toujours que la valeur du paramètre ComputerName correspond exactement au nom commun fourni lors de la création du certificat. Si vous tentez de vous connecter à un autre nom d’hôte ou peut-être à l’adresse IP de l’hôte, vous recevrez une erreur de non-concordance du certificat provoquant une panne de connexion.

Configuration de l’authentification basée sur un certificat

À présent, vous devriez déjà avoir un écouteur WinRM configuré pour utiliser HTTPS. Si c’est le cas, vous pouvez également utiliser un certificat d’authentification d’utilisateur pour vous authentifier en tant qu’utilisateur local sur le serveur distant. L’utilisation d’un certificat d’utilisateur est l’une des plus sécurisées, mais sa configuration prend un certain temps. Vous constaterez que c’est aussi beaucoup de travail répété puisque chaque certificat est unique à la machine cliente individuelle.

L’authentification par certificat ne fonctionne qu’avec les comptes d’utilisateurs locaux et non avec les utilisateurs de domaine.

En supposant que vous ayez demandé un certificat pour l’authentification du client comme couvert dans la section Création de la demande de certificat, poursuivez la lecture suivante :

Activation de l’authentification par certificat et Mappage de l’utilisateur sur le serveur

  1. Sur le serveur, exécutez la commande Set-Item pour autoriser l’authentification par certificat.
Set-Item WSMan:\localhost\Service\Auth\Certificate -Value $true

2. Ensuite, exécutez Get-ChildItem pour consulter le magasin des autorités de certification racine de confiance afin de trouver l’empreinte numérique de l’autorité de certification qui a émis le certificat d’authentification client. Pour ce faire, filtrez les certificats par sujet contenant le nom de votre autorité de certification.

Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like 'CA-Name'}

3. Exécutez la commande ci-dessous où SubjectName est l’objet du certificat d’utilisateur que vous avez fourni lors de la création du certificat

Le CAThumbprint est l’empreinte de l’autorité de certification collectée avec la commande précédente, puis les informations d’identification sont le nom d’utilisateur et le mot de passe de l’utilisateur local qui seront utilisés pour l’authentification basée sur le certificat.

New-Item WSMan:\localhost\ClientCertificate -Subject SubjectName -URI * -Issuer CAThumbprint -Credential (Get-Credential)

Tester l’authentification basée sur un certificat

Maintenant que le mappage du certificat vers l’utilisateur est configuré, utilisez le certificat sur la machine cliente pour vous authentifier sans fournir d’informations d’identification.

Sur le client dans PowerShell, obtenez l’empreinte du certificat client en consultant le magasin de certificats personnel.

Get-ChildItem Cert:\CurrentUser\My

Spécifiez maintenant l’empreinte du pouce dans le paramètre CertificateThumbprint à une commande PSRemoting comme ci-dessous.

Enter-PSSession -ComputerName ServerName -CertificateThumbprint <Thumbprint>

Notez que l’authentification basée sur un certificat n’étant utilisable qu’avec un écouteur HTTPS -UseSSL est implicite, contrairement aux autres méthodes d’authentification pour lesquelles vous devez spécifier d’utiliser SSL.

Maintenant que vous avez appris à configurer WinRM sur SSL, en savoir plus sur PSRemoting dans notre publication PowerShell Remoting: Le guide ultime !

Vous voulez en savoir plus sur PowerShell en général, y compris beaucoup sur PSRemoting? Découvrez PowerShell pour les administrateurs système, le livre!

Leave a Reply