Windows 10 enthält eine vollständige Implementierung von IPsec. Man kann sich einen IPsec Client in Einstellungen für "Netzwerk und Internet" zusammenklicken. Vollständigen Zugriff auf alle Parameter hat man nur mit der Powershell. Eine Übersicht über alle VPN Client Cmdlets der Powershell findet man in der Dokumentation von Microsoft.
  1. Eine IPsec VPN-Verbindung wird mit folgendem Cmdlet erstellt: PS C:\> Add-VPNConnection -AllUserConnection -Name "meinVPN" -ServerAddress 1.2.3.4 -TunnelType "Ikev2" -AuthenticationMthod "EAP" -RememberCredential
    • Es wird eine IPsec VPN Verbindung erstellt, die alle Anwender nutzen können.
    • Der Name kann frei gewählt werden. Er dient nur der Anzeige und wird in den folgenden Kommandos verwendet, im die VPN-Verbindung auszuwählen.
    • Der VPN-Server hat die IP-Adresse 1.2.3.4. Man kann auch einen DNS Namen angeben. Die DNS Namen der VPN Server findet man auf der Webseite des VPN-Providers.
    • Die Authentifizierung gegenüber dem Server erfolgt mit Username/Passwort (EAP).
    • Die Login Credentials werden beim erfolgreichen Login gespeichert. Wenn man die Login Credentials nicht speichern möchte, kann man den letzten Parameter weglassen.
  2. Standardmäßig vertraut Windows 10 den Certification Authorities (CAs) im Store, um die Identität des VPN-Servers anhand seines X509v3 Zertifikates zu bestätigen.

    Unter Umständen kann es nötig sein, das Root Zertifikat von der Webseite des VPN Providers herunter zu laden, wenn der VPN Provider aus Sicherheitsgründen eine eigene CA verwendet statt der bekannten Certification Authorities. Bei ProtonVPN muss man z. B. das Zertifikat der ProtonVPN Root CA herunterladen und dann mit folgendem Befehl in den Store importieren: Import-Certificate -FilePath "C:\Users\XYZ\Download\ProtonVPN_ike_root.der" -CertStoreLocation Cert:\LocalMachine\Root

    Um Man-in-the-Middle Angriffe auf die VPN-Verbindung zu erschweren, kann man das CA Root Zertifikat festlegen, mit dem das Zertifikat des VPN Server signiert sein muss ("CA Pinning").

    Wenn man beispiels­weise ProtonVPN verwendet, könnte man nach dem Import des CA Root Zertifikat mit folgenden Powershell Kommandos die CA für diese VPN Verbindung festlegen:

    $ca = Get-ChildItem Cert:\LocalMachine\Root | ? Subject -EQ 'CN=ProtonVPN Root CA'

    Set-VpnConnection -ConnectionName "meinVPN" -MachineCertificateIssuerFilter $ca
    Der erste Befehl filtert das CA Root Zertifikat der Liste der vertrauens­würdigen CAs. Der zweite Befehl legt fest, dass dieses Root Zertifikat die Identität des VPN-Servers bestätigen muss.
  3. Ein guter VPN Provider wird seine Server so konfigurieren, das nur sichere Cipher für die Verschlüsselung verwendet werden. Wenn man den Admins des VPN-Servers diesbezüglich nicht vertraut, kann man mit folgendem Cmdlet die VPN Verbindung anpassen anpassen, um sichere Ciphersuiten gemäß NSA Suite-B-128 zu erzwingen: PS C:\> Set-VpnConnectionIPsecConfiguration -ConnectionName "meinVPN"
    -CipherTransformConstants GCMAES128 -EncryptionMethod AES128
    -PfsGroup ECP256 -DHGroup ECP256 -IntegrityCheckMethod SHA256
    -AuthenticationTransformConstants SHA256128
  4. Man kann festlegen, dass bestimmte Anwendungen nur via VPN genutzt werden dürfen. Es wird automatisch das VPN gestartet, wenn eine der definierten Anwendungen gestartet wird. Man definiert die VPN-only Anwendungen mit folgendem Cmdlet: PS C:\> Add-VpnConnectionTriggerApplication -ConnectionName "meinVPN"
    -ApplicationID <Path> | <Package Family Name>
    Legacy Anwendungen werde dabei über den Path der EXE-Datei spezifiziert, moderne Anwendungen werden über den Package Family Name referenziert.