Über Virtual Private Network (VPN) verbundene Clients erneuern Zertifikate nicht automatisch

Folgendes Szenario angenommen:

  • Clientcomputer beziehen automatisch Zertifikate von einer Active Directory integrierten Zertifizierungsstelle (Enterprise Certification Authority).
  • Ablaufende Zertifikate werden automatisch erneuert, wenn die Clients sich im internen Netzwerk befinden.
  • Ablaufende Zertifikate werden jedoch nicht automatisch erneuert, wenn die Clients über Virtual Private Network (VPN) verbunden sind.
  • Dies kann dazu führen, dass Clients ihr Zertifikat nicht mehr rechtzeitig vor Ablauf erneuern und sich nicht mehr mit dem VPN verbinden können.

Hintergründe

Eine ausführliche Beschreibung der Funktionsweise der manuellen und automatischen Zertifikatbeantragung von einer Active Directory integrierten Zertifizierungsstelle findet sich im Artikel "Grundlagen manuelle und automatische Zertifikatbeantragung über Lightweight Directory Access Protocol (LDAP) und Remote Procedure Call / Distributed Common Object Model (RPC/DCOM) ".

In der Standardeinstellung replizieren alle Domänenmitglieder durch den Autoenrollment Prozess automatisch das Public Key Services Objekt der Active Directory Gesamtstruktur. Die Auslöser hierfür sind:

  • Bei Anmeldung des Benutzers (bei Computern, wenn sich das Computerkonto anmeldet, also beim Systemstart).
  • Per Timer alle 8 Stunden.
  • Bei einer Aktualisierung der Gruppenrichtlinien, vorausgesetzt, es gab eine Änderung.

Wird dieser Prozess gestartet und ist die entsprechende Einstellung für automatische Zertifikatbeantragung und -Erneuerung gesetzt, wird durch die obigen Auslöser auch die Beantragung und Erneuerung von Zertifikaten ausgelöst.

Ist ein Client per VPN verbunden, kann es vorkommen, dass keiner der Auslöser zutrifft:

  • Bei Anmeldung des Benutzers, also bei Computern, wenn sich das Computerkonto anmeldet, also beim Systemstart, ist oft noch keine VPN-Verbindung aufgebaut, sodass der Client keinen Zugriff auf das Netzwerk hat.
  • Per Timer alle 8 Stunden trifft oftmals nicht zu, weil die VPN-Verbindung meist nicht so lange aufrecht erhalten bleibt.
  • Bei einer Aktualisierung der Gruppenrichtlinien, vorausgesetzt, es gab eine Änderung – trifft oft nicht zu, da der Auslöser nur bei Änderungen der Gruppenrichtlinien greift.

Trifft keiner dieser Auslöser zu, wird der Autoenrollment Prozess nie ausgelöst (zumindest nicht, während der Client mit dem Netzwerk verbunden ist), und es kann dazu kommen, dass die Clientzertifikate ablaufen.

Lösung: Einen geplanten Task mit einem zusätzlichen Auslöser einrichten

Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken , um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.

Die Lösung besteht darin, eine Gruppenrichtlinie einzurichten, die über die Group Policy Preferences (GPP) einen weiteren Auslöser für den Autoenrollment Prozess anlegt. Wenn beispielsweise der VPN-Client ein Ereignis protokolliert, wenn die VPN-Verbindung hergestellt ist, kann dieses Ereignis als Auslöser dienen.

Zunächst wird über die Gruppenrichtlinien-Managementkonsole (gpmc.msc) ein neues Gruppenrichtlinienobjekt erzeugt.

Group Policy Management: Kontextmenü "New" auf "Group Policy Objects" in der Domäne intra.adcslabor.de

Diesem wird ein aussagekräftiger Name gegeben.

Dialog "New GPO": Name "VPN Client Auto-Enrollment Task", Source Starter GPO "(none)"

Anschließend wird das Gruppenrichtlinienobjekt bearbeitet.

Kontextmenü der Gruppenrichtlinie "VPN Client Auto-Enrollment Task" mit dem Eintrag "Edit..."

Unter "Computer Configuration" - "Preferences" - "Control Panel Settings" - "Scheduled Tasks" wird mit Rechtsklick ein neuer geplanter Task für "At least Windows 7" angelegt.

Group Policy Management Editor, "Scheduled Tasks": Menü "New", "Scheduled Task (At least Windows 7)" gewählt

Im Karteireiter "General" wird die Aktion auf "Create" gestellt und dem Task ein aussagekräftiger Name zugewiesen.

In den "Security Options" wird auf "Change User or Group..." geklickt.

Task-Eigenschaften, Registerkarte "General": Action "Create", Name "VPN Client Auto-Enrollment Task", "Change User or Group..." markiert

Als Objektname wird "SYSTEM" eingegeben und auf "Check Names" geklickt.

Dialog "Select User or Group": Objektname SYSTEM eingegeben

Anschließend wird das "SYSTEM" Objekt ausgewählt und mit "OK" bestätigt.

Dialog "Multiple Names Found": Treffer SYSTEM ausgewählt, darunter mehrere SystemMailbox-Konten

Zurück in den "Security Options" wird "Run whether user is logged on or not" sowie "run with highest privileges" ausgewählt.

Task-Sicherheitsoptionen: NT AUTHORITY\System, "Run whether user is logged on or not" und "Run with highest privileges" markiert

Im Karteireiter "Triggers" wird auf "New..." geklickt.

Task-Eigenschaften, Registerkarte "Triggers": leere Liste, Schaltfläche "New..." markiert

Nachfolgend wird die Einrichtung eines Auslösers basierend auf den Ereignisprotokollen des Windows-integrierten VPN Client beschrieben. Für die eigene Umgebung muss ermittelt werden, ob der eingesetzte VPN Client überhaupt Ereignisse erzeugt und wie diese aussehen. Falls es keine Möglichkeit gibt, ein Ereignis abzufangen, wäre auch ein zeitgesteuerter Auslöser, beispielsweise stündlich, eine valide Option. Allerdings sollte die Aktualisierung nicht zu oft erfolgen, da hier eine gewisse Netzwerklast anfällt, die sich mit der Anzahl der verbundenen Clients potenziert.

Im oberen Auswahlfeld wird der Auslöser auf "On an event" gesetzt. In den Einstellungen wird "Custom" gewählt und anschließend auf "New Event Filter" geklickt

Dialog "New Trigger": "On an event", Option "Custom" und "New Event Filter..." markiert

Im nachfolgenden Dialog kann entweder ein Event Filter aus den vorhandenen Optionen gebildet werden, oder mit dem Karteireiter "XML" ein eigener Filter definiert werden.

Dialog "New Event Filter": Registerkarte "XML" markiert

Hier ein Beispiel für den Windows-internen VPN Client, der eine Verbindung mit dem Namen "ADCS Labor VPN" hergestellt hat.

<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[(Level=4 or Level=0) and (EventID=20225)]] and *[EventData[Data='ADCS Labor VPN']]</Select>
</Query>
</QueryList>

Dialog "New Event Filter", Registerkarte "XML": XPath-Abfrage auf Application, EventID 20225 und ADCS Labor VPN, "Edit query manually" aktiv

Eine sehr gute, zuverlässige Alternative ist, die Verbindung zum internen Netzwerk als Auslöser zu verwenden.

Diese Information kann man dem Ereignis Nr. 10000 der Quelle NetworkProfile (im Ereignisprotokoll Microsoft-Windows-NetworkProfile/Operational) entnehmen. Es muss zusätzlich darauf gefiltert werden, dass eine Verbindung zur Domäne erkannt wurde (Kategorie 2).

<QueryList>
<Query Id="0" Path="Microsoft-Windows-NetworkProfile/Operational">
<Select Path="Microsoft-Windows-NetworkProfile/Operational">*[System[(EventID=10000)]] and *[EventData[(Data[@Name="Category"] = "2")]]</Select>
</Query>
</QueryList>

Wichtig ist, dass in den Einstellungen des Triggers eine kleine Verzögerung eingebaut wird, da es bei Aufbau der VPN-Verbindung unter Umständen ein paar Sekunden dauern kann, bis die Verbindung auch tatsächlich genutzt werden kann. 30 Sekunden bis eine Minute sollten optimal wirken.

Dialog "New Trigger": "Delay task for" mit "30 seconds" markiert

Im Karteireiter "Actions" wird auf "New..." geklickt.

Task-Eigenschaften, Registerkarte "Actions": leere Liste, Schaltfläche "New..." markiert

Anschließend wird auf "Browse..." geklickt.

Dialog "New Action": "Start a program", Schaltfläche "Browse..." markiert

Es wird der Ordner "C:\Windows\System32\" ausgewählt und nach der certutil.exe gesucht.

Dialog "Open" im Ordner System32: certutil.exe ausgewählt

Dem Befehl wird noch das Argument "-pulse" mitgegeben

Dialog "New Action": Program/script C:\Windows\System32\certutil.exe, Argument -pulse

Im Karteireiter "Settings" wird noch "Allow task to be run on demand" ausgewählt.

Task-Eigenschaften, Registerkarte "Settings": "Allow task to be run on demand" markiert

Die Gruppenrichtlinie kann nun auf die Clientcomputer verlinkt werden.

Group Policy Management: Kontextmenü der OU "Clients" mit "Link an Existing GPO..."

Die Clients sollten, wenn die Domäne mit den Standardeinstellungen arbeitet, nach 90 Minuten die neue Gruppenrichtlinie anwenden. Anschließend sollte bei jeder VPN-Verbindung der Autoenrollment Prozess ausgelöst werden.

Task Scheduler: Aufgabe "VPN Client Auto-Enrollment Task", Status "Ready", Trigger "Custom event filter"