PKI: Aufräumen der Datenbank

Wenn man eine PKI hat, welche bereits ein paar Jahre in Betrieb ist und zudem noch automatische Zertifikate ausstellt, kann es sein, dass die Datenbank der Zertifizierungsstelle (kurz „CA-Datenbank“) so voll ist, dass manchmal sogar die Management-Konsole ihren Dienst verweigert. Spätestens dann sollte man die CA-Datenbank aufräumen – besser ist natürlich, wenn man dies bereits bei der Installation der PKI als regelmäßigen Job einplant.

Löschen von Einträgen

Mit dem Kommandozeilen-Tool „certutil“ kann man Einstellungen an der CA durchführen, im aktuellen Fall wird der Parameter „-deleterow“ benötigt:

certutil [Options] -deleteRow ROWID | Date [Request | CERT | Ext | Attrib | CRL]

Löschen einzelner Zeilen

Man kann gezielt einzelne Zeilen löschen, dafür muss einfach die RowID mit angegeben werden:

certutil -deleterow <RowId> 

Löschen von abgelaufenen & widerrufenen Zertifikaten

Ein Löschen von alten Zertifikaten erfordert, dass man ein Zeitpunkt festlegt, bis wann Zertifikate gelöscht werden können. In diesem Beispiel werden also alle alten Zertifikate gelöscht, die älter als 01. Januar 2023 sind:

certutil -deleterow 01/01/2023 cert

Ein Löschen noch gültiger Zertifikate ist auf diese Weise also nicht möglich.

Löschen von alten Zertifikatsanfragen

Bevor ein Zertifikat ausgestellt wird, liegt erstmal eine Zertifikatsanfrage vor. Wird diese nicht bestätigt, bleibt sie liegen und wird in der Regel nicht aufgeräumt. Also sollte man dies auch regelmäßig tun. Dazu muss ein Zeitpunkt festlegt, bis wann Zertifikatsanfragen gelöscht werden können. In diesem Beispiel werden also alle alten Zertifikatanfragen gelöscht, die älter als 01. Januar 2023 sind:

certutil -deleterow 01/01/2023 request

Wichtiger Hinweis:
Das Datum muss im lokalen Format (Regionseinstellung des Computers, auf dem der Befehl ausgeführt wird), angegeben werden!

Timeouts

Sollte der Datensatz bereits zu groß sein, kann es zum Fehlercode „-939523027“ kommen. Hier könnte man sich mit einem kleinem Batchscript helfen, welches dann immer zum Anfang springt – hier im Beispiel werden Zertifikate und Zertifikatsanfragen aufgeräumt:

@echo off

:Top_cert
certutil -deleterow <Datum> Cert
If %ERRORLEVEL% EQU -939523027 goto Top_cert

:Top_request
certutil -deleterow <Datum> Request
If %ERRORLEVEL% EQU -939523027 goto Top_request

EXIT

Man kann das Script natürlich noch so erweitern, dass für die einzelnen Befehle als Datum eine Variable steht, welche zu Beginn einen Wert erhält. Zudem kann man den Datumswert auch berechnen lassen, also bspw. „heutiges Datum minus 60 Tag“. Dadurch könnte man das Skript mittels TaskScheduler automatisch jeden Tag laufen lassen und alle Zertifikatsanfragen und abgelaufenen Zertifikate, die älter als 60 Tage sind, werden gelöscht.

Nachweis / Logging

Ist das Eventlogging eingerichtet, erfolgt ein Eintrag im Eventlog „Security“ mit der Event-ID 4896 – hier ein Beispiel:

Ronny Böttcher

Microsoft-Systemadministrator seit 2007 und seit 2021 als IT-Consultant bei Bechtle in Deutschland am Standort Mannheim; alle bisherigen Stationen siehe bei "Über mich". In seiner Freizeit bei der Feuerwehr und Modellbahner, zudem gerne am Kochen/Grillen - oder am Essen 😁

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

DSGVO Cookie Consent mit Real Cookie Banner