Ü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 Benutzer, 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

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.

Diesem wird ein aussagekräftiger Name gegeben.

Anschließend wird das Gruppenrichtlinienobjekt bearbeitet.

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

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.

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

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

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

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

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 Eintellungen wird "Custom" gewählt und anschließend auf "New Event Filter" geklickt

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

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>

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.

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

Anschließend wird auf "Browse…" geklickt.

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

Dem Befehl wird noch das Argument "-pulse" mitgegeben

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

Die Gruppenrichtlinie kann nun auf die Clientcomputer verlinkt werden.

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.

Weiterführende Links: