Erweiterte Abfragen gegen die Zertifizierungsstellen-Datenbank

Die Zertifizierungsstellen-Datenbank speichert einen Großteil der Informationen über die Aktivitäten einer Zertifizierungsstelle. Sie enthält unter Anderem Informationen über:

  • Ausgestellte Zertifikate
  • Widerrufene Zertifikate
  • Veröffentlichte Sperrlisten
  • Ausstehende Zertifikatanforderungen
  • Abgelehnte Zertifikatanforderungen
  • Fehlgeschlagene Zertifikatanforderungen

Eine Einsicht in den Inhalt Zertifizierungsstellen-Datenbank erfolgt üblicherweise über die Managementkonsole der Zertifizierungsstelle (certsrv.msc), jedoch sind die Möglichkeiten für eine Auswertung und insbesondere für eine maschinelle Verarbeitung sehr beschränkt.

Möchte man einen tieferen Einblick erhalten, muss man auf Kommandozeilenwerkzeuge zurückgreifen. Das Programm certutil bietet hierfür den -view Schalter.

CertUtil [Options] -view [Queue | Log | LogFail | Revoked | Ext | Attrib | CRL] [csv]

Der -view Schater kann unter Anderem mit den folgenden Argumenten kombiniert werden:

ArgumentBeschreibung
-restrictSchränkt die Suche auf bestimme Kriterien ein.
-outBestimmt die auszugebenden Felder der Datenbank.
csvWenn dieser Schalter (am Ende und ohne Bindestrich) gesetzt ist wird die Ausgabe von Certutil als CSV-Inhalt ausgegeben, sodass sie maschinell weiter verarbeitet werden kann.

Um beispielsweise einen Bericht über alle ausgestellten, nicht widerrufenen und noch nicht abgelaufenen Zertifikats zu erhalten, kann man eine entsprechende Abfrage erstellen, wie nachfolgend beschrieben wird.

Der Einfachkeit und Übersichtlichkeit halber wird im Beispiel die Windows PowerShell verwendet, um erweiterte Möglichkeiten für die Filterung zu bekommen.

Mit der Variable $Now wird das Datum passend zu den Regionseinstellungen des angemeldeten Benutzers als Text ausgegeben, sodass es im weiteren Verlauf als Filterkriterium verwendet werden kann.

$Now = $((Get-Date).ToString($(Get-culture).DateTimeFormat.ShortDatePattern))

Die Variable $Out beinhaltet eine Liste der auszugebenden Datenbankfelder, in diesem Fall:

  • RequestID (die eindeutige Anforderungs-ID des Zertifikats)
  • SerialNumber (die Seriennummer des Zertifikats)
  • RequesterName (die Active Directory Identität des Antragstellers)
  • CommonName (der gemeinsame Name (Common Name) im Zertifikat)
  • CertificateTemplate (die Zertifikatvorlage, aus welcher das Zertifikat hervorging)
  • NotBefore (das Datum, ab wann das Zertifikat gültig ist)
  • NotAfter (das Datum, wann das Zertifikat ablaufen wird)
$Out = "RequestID,SerialNumber,RequesterName,CommonName,CertificateTemplate,NotBefore,NotAfter"

Die Variable $Restrict definiert die Suchkriterien. Diese sind in diesem Beispiel:

  • Nur ausgestellte, nicht widerrufene Zertifikats (Dispisition=20)
  • Nur Zertifikats, die noch gültig, also noch nicht abgelaufen sind (NotAfter>=$Now)
$Restrict = "Disposition=20,NotAfter>=$Now"

Die Variable $Datei bestimmt den Dateinamen, in welcher die Ausgabe des Befehls zur weiteren Verarbeitung gespeichert werden soll

$Datei = "$($env:COMPUTERNAME)_Zertifikate.csv"

Der Befehl kann nun zusammengesetzt und ausgeführt werden

certutil -view -restrict $Restrict -out $Out csv > $Datei

Die nun ausgegebene Datei kann beispielsweise in Excel geladen werden. Hierzu öfnet man eine neue Datei und wählt im Karteireiter Daten aus, dass diese aus einer CSV-Datei eingelesen werden sollen

Die eingelesenen Daten sollten direkt korrekt importiert worden sein.

Nun kann man die Filter-Funktionen von Excel verwenden, um einen tieferen Einblick in die ausgestellten Zertifikate zu erhalten. Beispielsweise kann man nach dem Feld CertificateTemplate filtern, um alle ausgestellten Zertifikate von einer bestimmten Zertifikatvorlage angezeigt zu bekommen

Weiterführende Links:

Externe Quellen