SSTP erfordert ein vom Client akzeptiertes SSL Zertifikat. Wer eine interne Zertifizierungsstelle hat, kann diese verwenden. Dabei muss nur sichergestellt werden, das der Client die Sperrliste auch im Internet erreichen kann. An dieser Anforderung scheitern viele. Warum also nicht ein anderes Zertifikat verwenden, zum Beispiel ein kostenfreies von Let’s encrypt.
Dieser Artikel setzt einen Microsoft Windows Routing und RAS Server mit Konfigurierten SSTP VPN voraus. Wenn Sie den noch nicht installiert haben, empfehle ich ihnen einen Blick in den Artikel: VPN Server mit Windows Server 2022.
Installation von Let’s Encrypt Zertifikaten
Um Let’s Encrypt zu steuern verwende ich das passende PowerShell Module Posh-ACME. Die Installation erfolgt am einfachsten über die PowerShell Gallery. Dazu führen Sie in einer PowerShell Session mit administrativen Berechtigungen die folgenden Befehle aus:
Install-PackageProvider -Name NuGet -Force
Install-Module -Name Posh-ACME -Scope AllUsers

Jetzt wird das Zertifikat beantragt. Während diesen Prozesses muss ein entsprechender Prüf-Eintrag in den DNS Eingetragen werden. Der erforderlichen Eintrag wird vom PowerShell Skript angezeigt. Sorgen Sie also dafür das Sie Zugang zu der Konfiguration der DNS-Zone haben die Sie verwenden möchten. Und achten sie auf Tipp-Fehler. Bedenken Sie auch, das Änderungen im DNS manchmal etwas länger brauchen, Also lieber nach der Änderung noch einen Kaffee trinken. Die Befehle sind:
Set-PAServer LE_Prod
New-PACertificate -Domain "vpnhost.domain.tld" -Contact "mail@adresse.tld" -CertKeyLength ec-256 -AcceptTOS -Install

Jetzt können Sie in der Zertifikate Verwaltung für Computer auch das entsprechende Zertifikat sehen. Wie üblich bei Let’s Encrypt beträgt die Laufzeit nur 3 Monate.

Damit der VPN Server auch das richtige Zertifikat benutzt, benötigen wir wieder etwas PowerShell:
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match "vpnhost.domain.tld"}
Import-Module RemoteAccess
Stop-Service RemoteAccess
Set-RemoteAccess -SslCertificate $cert
Start-Service RemoteAccess

Erneuerung von Zertifikaten
Die Erneuerung kann ganz Einfach mit dem Befehl „Submit-Renewal“ erfolgen, allerdings erst 5 Wochen vor Ablauf. Aber auch hier muss die Konfiguration für die Zertifikatszuweisung erneut durchgeführt werden. Hintergrund ist das Let Encrypt neue Zertifikate ausstellt, statt die bestehenden zu verlängern.
Das zu erstellende Skript muss als geplante Aufgabe im selben Benutzerkontext (Inkl. Administrativer Rechte!) ausgeführt werden, wie der Request. Ansonsten fehlt das ACME Profil mit den benötigten Informationen. Ein Musterskript könnte so aussehen:
Import-Module RemoteAccess
Stop-Service RemoteAccess
Submit-Renewal
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match "vpnhost.domain.tld" -and $_.NotBefore -lt $(Get-Date) -and $_.NotAfter -gt $(Get-Date) }
Set-RemoteAccess -SslCertificate $cert
Start-Service RemoteAccess
Schreibe einen Kommentar