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:
- Création du certificat auto-signé sur la machine de destination.
- Configuration du serveur Web WinRM (écouteur) du serveur pour utiliser le certificat auto-signé pour l’authentification.
- Ouverture des ports appropriés sur le pare-feu Windows de la machine de destination.
- 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'
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>"}'
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.
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:
- 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.
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.
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.
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:
- Accédez à votre serveur ADCS à l’adresse http://<server nom FQDN >/certsrv/certrqxt.ASP.
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.
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:
- 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.
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.
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.
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.
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:
- 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
- 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