SSTP VPN mit Let’s Encrypt Zertifikaten

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.

SSTP VPN mit Let's Encrypt Zertifikaten - 1b0019bed9bd4eecafa022b57f31bb6e - 2

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
SSTP VPN mit Let's Encrypt Zertifikaten - 20211111 RAS2022 RRAS LetsEncrypt 01 - 3

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 "[email protected]" -CertKeyLength ec-256 -AcceptTOS -Install
SSTP VPN mit Let's Encrypt Zertifikaten - 20211111 RAS2022 RRAS LetsEncrypt 02 - 4

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.

SSTP VPN mit Let's Encrypt Zertifikaten - 20211111 RAS2022 RRAS LetsEncrypt 03 - 5

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
SSTP VPN mit Let's Encrypt Zertifikaten - 20211111 RAS2022 RRAS LetsEncrypt 04 - 6

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