Wie heißen die Zertifikatspeicher auf Windows Systemen?

Hallo zusammen, Fabian hier. Ab und an wird uns die Frage gestellt, wie man Zertifikatspeicher (certificate stores) bzw. deren Namen identifizieren und ggf. Zertifikate in diese Zertifikatspeicher importieren kann.

Grundsätzlich ist die komfortabelste Variante sicherlich Group Policies zu nutzen. So ist es beispielsweise möglich, Zertifikate in den Zertifikatspeicher „Vertrauenswürdige Stammzertifizierungsstellen“ („Trusted Root Certificate Authorities“) zu importieren, um so etwa Root-Zertifikate als vertrauenswürdig zu behandeln.


Wie man jedoch im rot markierten Bereich des Bildschirmfotos oben (neudeutsch „Screenshot“) sehen kann, sind nicht alle Zertifikatspeicher aufgeführt, die wir beispielsweise in der „certmgr.msc“ bzw. einer eigenen MMC (siehe unten) sehen können. Bei den Benutzereinstellungen der GPO sind die Möglichkeiten noch begrenzter, auch wenn einige Zertifikate über die Internet Explorer Maintenance verteilt werden können.


Möchte man nun also Zertifikate etwa mittels „certutil.exe“ in einen bestimmten Zertifikatspeicher schreiben oder andere Aktionen durchführen, benötigt man zuallererst einmal den Namen desselbigen. Hierzu ist der wahrscheinlich schnellste Weg bei einem Windows XP oder auch Windows Server 2003 System, die Registry zu bemühen. Dort liegt ein Teil der Zertifikate für den entsprechenden Benutzer oder Computer in den jeweiligen Stores, deren Namen sich über die Registry also recht schnell herausfinden lassen:


HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
Wie in den Abbildungen zu sehen ist, lassen sich so problemlos die Zertifikatspeicher für den ausgewählten Benutzer (im Beispiel den gerade angemeldeten Benutzer) oder für den Computer anzeigen.

Mit Hilfe der Windows Vista / Windows Server 2008 „certutil.exe“ Version läßt sich das noch einfacher erledigen – gespickt mit einigen interessanten Zusatzinformationen: Es gibt ab dieser „certutil.exe“ Version den Schalter „-enumstore“. Möchte man sich also die vorhandenen Zertifikatspeicher für Benutzer, Computer oder auch Dienste anzeigen lassen, kann man folgende Kommandos verwenden (selbst ausprobieren macht schlau ;-) …):

certutil –enumstore
certutil –enumstore –grouppolicy
certutil –enumstore –enterprise

certutil –enumstore –user
certutil –enumstore –user –user
certutil –enumstore –user –grouppolicy

certutil –enumstore –service
certutil –enumstore –service –service

Wie man hierbei gut sehen kann, kann so etwa auch ein konkreter Speicherort abgefragt werden (z.B. „-grouppolicy“). Hintergrund dafür ist, daß die Stores zwar logisch als ein Speicherort dargestellt werden, im System jedoch an verschiedenen Stellen existieren können (oder einige Computer Zertifikatspeicher auch für den Benutzer transparent "eingeblendet" werden). Das bedeutet, daß an unterschiedlichen Stellen Zertifikate liegen können: Beispielsweise in der Registry, im Dateisystem oder aber in der Active Directory. Dazu kommt, daß zum Beispiel Zertifikate im Speicher "Vertrauenswürdige Stammzertifizierungsstellen" nicht nur für den Computer bzw. für SYSTEM zugreifbar sind, sondern diese auch für den Benutzer zur Verfügung stehen - wenn der Client selbst dem Zertifikat der Stammzertifizierungsstelle vertraut, mach dies auch für den Benutzer Sinn. Daher werden in der logischen Ansicht auf die Zertifikatspeicher eines Benutzers auch die Zertifikate des Computer-Speichers der "Vertrauenswürdigen Stammzertifizierungsstellen" mit eingeblendet. Weitere Informationen dazu finden sich hier: https://technet.microsoft.com/en-us/library/cc757138.aspx und https://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/distrib/dscj_mcs_ssft.mspx?mfr=true .

Einen schnellen Blick auf den „physischen“ Speicherort kann man werfen, indem man unter „certmgr.msc“ bzw. einer eigenen MMC auf den Knoten „Zertifikate - Aktueller Benutzer“ bzw. „Zertifikate - Lokaler Computer“ klickt, um dann über „Ansicht“ --> „Optionen“ --> die Option „Physikalischer Zertifikatspeicher“ zu aktivieren. Es wird dann in der MMC in eine Darstellung gewechselt, die die Knoten noch einmal nach Speicherort aufteilt. Hierdurch erklärt sich dann auch, warum etwa manche Zertifikate in der normalen Ansicht doppelt angezeigt werden – sie liegen schlichtweg mehrfach an unterschiedlichen Speicherorten.

Möchte man mit Kenntnis der Speicherorte nun bestimmte Zertifikate in einen konkreten Zertifikatspeicher importieren / auslesen / löschen, kann man etwa „certutil.exe“ nutzen. Beispiele für die Bearbeitung eines Zertifikats im Zertifikatspeicher „Vertrauenswürdige Herausgeber“ („Trusted Publisher“) eines Benutzers könnten dann etwa so aussehen:

certutil -store "TrustedPublisher" "<THUMBPRINT oder Seriennummer des Zertifikats>"  

--> Anzeigen des gewählten Zertifikats im Trusted Publisher Store.

certutil -addstore "TrustedPublisher" "C:\PFAD\Zertifikat.cer"

--> Hinzufügen des Zertifikats in den Trusted Publisher Store.

certutil -delstore "TrustedPublisher" "<THUMBPRINT oder Seriennummer des Zertifikats>"

--> Löschen des konkreten Zertifikats aus dem Trusted Publisher Store, es werden dabei keine anderen Zertifikate gelöscht als das angegebene Zertifikat mit dem entsprechenden Thumbprint bzw. der entsprechenden Seriennummer.

Bindet man diese Kommandozeilen nun etwa in ein Startscript ein, kann man die Bearbeitung eines Zertifikatspeichers recht komfortabel erledigen. Zu beachten ist dabei lediglich, daß certutil dann entweder auf dem Client selbst vorhanden sein muß oder aber über das Netzwerk aufgerufen werden muß.

Hinweis: Der Schalter „-v“ ist bei den meisten Optionen in „certutil.exe“ eine interessante Option – fast alle Schalter zeigen, ergänzt durch ein „-v“, ausführlichere Daten an, so auch der Befehl:

certutil –v –enumstore

oder etwa

certutil –v -?

Das aber nur am Rande.

Viele Grüße
Fabian