rss logo

Guide pour établir un VPN en mode transport IPsec avec authentification X509 entre deux ordinateurs Windows

J'ai déjà expliqué comment établir un VPN IPsec entre deux hôtes dans un environnement Microsoft Windows en utilisant une PSK. Pour plus de détails, voir ici. Passons ici à l'étape supérieure, en remplaçant la PSK par des certificats x509. Dans ce guide, nous allons explorer comment configurer un VPN IPsec sécurisé entre des hôtes Microsoft Windows au sein du même LAN afin d'améliorer considérablement la sécurité du réseau. Avec cette configuration, toutes les communications entre les machines seront chiffrées sans exception.

Architecture Réseau

Pour les besoins de cet article, nous conserverons une architecture simple. Nous établirons une connexion sécurisée en utilisant un VPN IPsec avec une authentification x509 entre un ordinateur exécutant Windows 11 et un serveur exécutant Windows Server 2022. Les deux ordinateurs seront sur le même réseau local.

Schéma du réseau montrant un tunnel ipsec X509 entre deux hôtes Windows
Windows Server Logo

Serveur Windows

PKI

Comme discuté précédemment, nous allons utiliser des certificats X.509 pour établir une connexion IPsec entre notre serveur et notre client. Pour ce faire, nous devons créer une PKI : une Autorité de Certification (CA) Racine qui signera les certificats, et deux certificats, un pour chacun de nos deux hôtes.

Toutes les commandes ci-dessous seront exécutées à partir d'une console PowerShell avec des droits administrateur.

Certificat pour le Serveur

  • Créer la CA Racine, qui nous permettra de signer les certificats du serveur et du client :
PS C:\> $rootCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName RootCA -KeyUsage CertSign,CRLSign,DigitalSignature -NotAfter (Get-Date).AddYears(10)
  • Créer le certificat du serveur, et le signer avec la RootCA (Note : nous pouvons changer "ServerName" par le nom réel du serveur.) :
PS C:\> $serverCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName ServerName -Signer $rootCert -NotAfter (Get-Date).AddYears(5)
  • Récupérer les informations du certificat du serveur dans la variable $serverCert :
PS C:\> $serverCert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -eq "CN=ServerName" }

Certificat Client

  • Créer un certificat client et le signer avec RootCA (Note : "W11" peut être remplacé par le nom réel du client.) :
PS C:\> $cert = New-SelfSignedCertificate -DnsName "W11" -CertStoreLocation "cert:\LocalMachine\My" -Signer $rootCert -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(5)
  • Définir un mot de passe pour protéger le fichier pfx, qui sera utilisé pour stocker le certificat du client avec la clé privée :
PS C:\> $password = ConvertTo-SecureString -String "PassPass" -Force -AsPlainText
  • Exporter le certificat client dans un conteneur pfx, exemple ici vers C:\W11.pfx :
PS C:\> Export-PfxCertificate -Cert $cert -FilePath "C:\W11.pfx" -Password $password

Vérification

  • Ouvrez la console Gestionnaire de certificats de l'ordinateur local :
Fenêtre Exécuter de Windows avec certlm.msc écrit à l'intérieur
  • Dans le dossier Personnel > Certificats, vérifiez que les certificats créés précédemment sont présents :
Gestionnaire de certificats de l'ordinateur local de Windows avec le dossier Certificats personnels ouvert

Configuration IPsec

Interface Graphique (GUI)

  • Ouvrir la console du Pare-feu Windows avec fonctions avancées de sécurité :
Fenêtre Exécuter de Windows avec wf.msc écrit
  • Faire un clic droit sur Règles de sécurité de connexion et sélectionner Nouvelle règle…:
Windows Defender Firewall with Advanced Security console with the connection security rules drop-down menu
  • Sélectionnez Personnalisé et cliquez sur Suivant :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion avec l'option personnalisée sélectionnée
  • Dans la section Quels ordinateurs sont dans le point de terminaison 1, sélectionnez Ces adresses IP et cliquez sur Ajouter… :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des points de terminaison
  • Ici, nous ajoutons l'Hôte ou le Réseau avec lequel nous devons établir une connexion IPsec pour communiquer :
Fenêtre Adresse IP, avec le réseau 192.168.1.0/24 rempli
  • Faites de même avec le point de terminaison 2 en entrant l'adresse IP du serveur puis cliquer sur Suivant :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des points de terminaison
  • Pour une sécurité maximale et pour imposer l'utilisation de IPsec, sélectionner Exiger l'authentification pour les connexions entrantes et sortantes :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des exigences
  • Comme nous allons utiliser un certificat comme Méthode d'authentification dans cet exemple, cliquer sur Personnaliser… :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape de la méthode d'authentification
  • Suiver ces étapes pour définir le Certificat :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, les trois étapes pour définir le certificat
  • Nous pouvons spécifier un ou plusieurs protocoles spécifiques à encapsuler dans IPsec, ici nous encapsulons tout :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des protocoles et des ports
  • Nous pouvons restreindre la règle à des profils spécifiques :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape du profil
  • Enfin, spécifier le Nom de la règle :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape du nom

PowerShell

  • Nous pouvons créer la même Règle IPsec que celle configurée juste au-dessus, en trois lignes de commande PowerShell :
PS C:\> $cert1Proposal = New-NetIPsecAuthProposal -Machine -Cert -Authority "CN=RootCA" -AuthorityType Root PS C:\> $certAuthSet = New-NetIPsecPhase1AuthSet -DisplayName "Computer Certificate Auth Set" -Proposal $cert1Proposal PS C:\> New-NetIPsecRule -DisplayName "IPsec" -Name "IPsec" -Mode Transport -InboundSecurity Require -OutboundSecurity Require -LocalAddress 192.168.1.200 -RemoteAddress 192.168.1.30 -Enable True -Phase1AuthSet $certAuthSet.Name

Nous avons maintenant terminé la configuration du serveur. Il est maintenant temps de passer à la configuration du client.

Configuration du Pare-Feu

Nous allons la créer une règle de pare-feu pour permettre les flux chiffrés.

Interface Graphique (GUI)

  • Faire un clic droit sur Règles de sécurité entrantes et sélectionner Nouvelle règle…:
Console du Pare-feu Windows Defender avec sécurité avancée, menu déroulant des règles entrantes
  • Sélectionner Personnalisé et cliquer sur Suivant:
Fenêtre de l'assistant Nouvelle règle entrante, étape Type de règle
  • Choisisser Tous les programmes et cliquer sur Suivant:
Fenêtre de l'assistant Nouvelle règle entrante, étape Programme
  • Nous pouvons spécifier un ou plusieurs protocoles spécifiques à correspondre par la règle, ici nous choisirons Tous les protocoles:
Fenêtre de l'assistant Nouvelle règle entrante, étape Protocole et Ports
  • Restreidre l'application de la règle aux adresses IP définies concernées:
Fenêtre de l'assistant Nouvelle règle entrante, étape Portée
  • À l'étape Action, configurer la condition Exiger que les connexions soient chiffrées:
Fenêtre de l'assistant Nouvelle règle entrante, étape Action, sélection de Exiger que les connexions soient chiffrées
  • Nous pouvons limiter l'application de la règle à des utilisateurs spécifiques, ce qui ne sera pas utilisé dans notre cas:
Fenêtre de l'assistant Nouvelle règle entrante, étape Utilisateurs
  • Nous pouvons faire de même pour limiter la règle à des ordinateurs spécifiques, ce qui ne sera pas utilisé dans cet exemple non plus:
Fenêtre de l'assistant Nouvelle règle entrante, étape Ordinateurs
  • Nous pouvons restreindre la règle à des profils spécifiques:
Fenêtre de l'assistant Nouvelle règle entrante, étape Profil
  • Enfin, spécifier le Nom de la règle:
Fenêtre de l'assistant Nouvelle règle entrante, étape Nom

PowerShell

  • Nous pouvons créer la même Règle de pare-feu que celle configurée ci-dessus, en une seule ligne de commande PowerShell:
PS C:\> New-NetFirewallRule -DisplayName "IPsec ALLOW" -Direction Inbound -Enabled True -Action Allow -LocalAddress 192.168.1.200 -RemoteAddress 192.168.1.0/24 -Protocol Any -Encryption Dynamic -Authentication Required

Windows 11

Logo Windows 11

Importation du Certificat

  • Tout d'abord, copier le fichier W11.pfx précédemment généré sur le système Windows 11 et double-cliquer dessus :
Un certificat Windows 11 sur le bureau
  • Sélectionner Ordinateur local puis cliquer sur Suivant :
Assistant d'importation de certificat, Bienvenue dans l'étape de l'assistant d'importation de certificat
  • Cliquer sur Suivant :
Assistant d'importation de certificat, Étape du fichier à importer
  • Saisisser le mot de passe précédemment défini lors de l'exportation des certificats vers pfx et cliquer sur Suivant :
Assistant d'importation de certificat, Étape de la protection de la clé privée
  • Choisir “Sélectionner automatiquement le magasin de certificats” et cliquer sur Suivant :
Assistant d'importation de certificat, Étape du magasin de certificats

Configuration IPsec

Je vais toutes les décrire, mais les étapes sont à peu près les mêmes que celles que nous avons suivies pour le serveur.

  • Ouvrir la console Pare-feu Windows Defender avec fonctions avancées de sécurité :
Fenêtre d'exécution de Windows avec wf.msc écrit à l'intérieur
  • Faire un clic droit sur Règles de sécurité de connexion et sélectionner Nouvelle règle… :
Console du pare-feu Windows Defender avec fonctions avancées de sécurité avec le menu déroulant des règles de sécurité de connexion
  • Sélectionner Personnalisé et cliquer sur Suivant :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion avec l'option personnalisée sélectionnée
  • Dans la section Quels ordinateurs sont dans le point de terminaison 1, sélectionner Ces adresses IP et cliquer sur Ajouter… :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des points de terminaison
  • Ici, nous ajoutons l'adresse IP de notre client :
Fenêtre d'adresse IP, avec le réseau 192.168.1.30 rempli
  • Faire de même avec le point de terminaison 2 en entrant l'adresse IP du serveur puis cliquer sur Suivant :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des points de terminaison
  • Pour une sécurité maximale et imposer l'utilisation de IPsec, sélectionner Exiger l'authentification pour les connexions entrantes et sortantes :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des exigences
  • Comme nous allons utiliser une clé partagée comme méthode d'authentification dans cet exemple, cliquer sur Personnaliser… :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape de la méthode d'authentification
  • Suivre ces étapes pour définir le certificat :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, les trois étapes pour définir la clé partagée
  • Nous pouvons spécifier un ou plusieurs protocoles spécifiques à encapsuler dans IPsec, ici nous encapsulons tout :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape des protocoles et ports
  • Nous pouvons restreindre la règle à des profils spécifiques :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape du profil
  • Enfin, spécifier le nom de la règle :
Fenêtre de l'assistant de nouvelle règle de sécurité de connexion, étape du nom
  • Faire un ping au serveur et vérifier que l'association de sécurité est présente :
Console du pare-feu Windows Defender avec fonctions avancées de sécurité dans le menu des associations de sécurité

Améliorer la sécurité

À partir de maintenant, tout devrait fonctionner et les connexions sont déjà chiffrées. Ici, nous allons voir comment renforcer davantage la sécurité en choisissant des protocoles IPsec plus robustes que ceux offerts par défaut. Toutes les commandes listées ci-dessous doivent être saisies à la fois sur le client et sur le serveur.

IKEv2

  • Activer le mode IKEv2 :
PS C:\> Set-NetIPsecRule -DisplayName "IPsec" -KeyModule IKEv2 -ForwardPathLifetime 120

Renforcer la sécurité en changeant les protocoles avec l'interface graphique (GUI)

  • Depuis la console Windows Defender Firewall with Advanced Security, faites un clic droit sur Windows Defender Firewall with Advanced Security, puis sélectionner Propriétés :
Console Windows Defender Firewall with Advanced Security
  • Dans l'onglet Paramètres IPsec, cliquer sur Personnaliser… :
Fenêtre des propriétés du Windows Defender Firewall with Advanced Security
  • Sélectionner Avancé et cliquer sur Personnaliser… :
Fenêtre Personnaliser les paramètres par défaut IPsec du Windows Defender Firewall with Advanced Security

Mode Principal

  • Tout d'abord, supprimer les entrées existantes, puis activer Diffie-Hellman et enfin cliquer sur Ajouter… :
Personnaliser les paramètres avancés de l'échange de clés du Windows Defender Firewall with Advanced Security
  • Changer les algorithmes par défaut :
Fenêtre Ajouter une méthode de sécurité du Windows Defender Firewall with Advanced Security

Mode Rapide

  • Activer Exiger le chiffrement, puis supprimer les algorithmes prédéfinis et enfin cliquer sur Ajouter… :
Personnaliser les paramètres de protection des données du Windows Defender Firewall with Advanced Security
  • Sélectionner ESP, puis modifier les algorithmes :
Fenêtre Ajouter des algorithmes d'intégrité et de chiffrement du Windows Defender Firewall with Advanced Security

Renforcer le mode rapide avec PowerShell

  • Changer les protocoles :
PS C:\> $proposal1 = (New-NetIPsecQuickModeCryptoProposal -Encapsulation ESP -Encryption AES256 -ESPHash SHA256) PS C:\> $mMCryptoSet=(New-NetIPsecQuickModeCryptoSet -DisplayName "Quick Mode Rule" -Proposal $proposal1) PS C:\> Set-NetIPsecRule -DisplayName IPsec -QuickModeCryptoSet $mMCryptoSet.Name

Quelques Commandes

  • Obtenir les propriétés IPsec à partir de la règle IPsec :
PS C:\> Get-NetIPsecRule -DisplayName IPsec
  • Supprimer la règle IPsec nommée IPsec :
PS C:\> Remove-NetIPsecRule -DisplayName IPsec
  • Obtenir les propriétés du mode principal IPsec pour la règle IPsecMain :
PS C:\> Get-NetIPsecMainModeRule -DisplayName IPsecMain
  • Supprimer le profil principal IPsec :
PS C:\> Remove-NetIPsecMainModeRule -Name "{XXX-XXX-XXX}"
  • Obtenir les Main Mode SA (association de sécurité) actives :
PS C:\> Get-NetIPsecMainModeSA
  • Obtenir les Quick Mode SA (association de sécurité) actives :
PS C:\> Get-NetIPsecQuickModeSA
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address