Anwendungsbeispiele cryp32.lib
Hier finden Sie einige Beispiele, wie man mit Hilfe der crypt32-Funktionen auf Zertifikate des Windows "Certificate Store" zugreifen kann. Aber auch wie man Zertifikate kopieren, löschen und wie man ihre Eigenschaften ändern kann:
- Certificate Stores, Locations and Providers
- Verwaltung der vertrauenswürdigen Benutzerzertifikate
- Certificate Tool (commandline version)
- Wie könnte ein Skript aussehen?
1.Certificate Stores, Locations and Providers
Microsoft unterscheidet folgende "Certificate Store Locations":
CERT_SYSTEM_STORE_CURRENT_SERVICE;
CERT_SYSTEM_STORE_CURRENT_USER;(default location)
CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY;
CERT_SYSTEM_STORE_LOCAL_MACHINE;
CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE;
CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY;
CERT_SYSTEM_STORE_SERVICES;
CERT_SYSTEM_STORE_USERS;... es können auch unterschiedliche Provider gewählt werden:
CERT_STORE_PROV_MEMORY
CERT_STORE_PROV_FILE
CERT_STORE_PROV_REG
CERT_STORE_PROV_SYSTEM (default provider)
CERT_STORE_PROV_SYSTEM_REGISTRY
CERT_STORE_PROV_PHYSICAL
CERT_STORE_PROV_SERIALIZED
Jeder "System Store" ist ein logische Ansammlung von ein oder mehreren "Physical Stores", die der lolkalen Maschine (CERT_SYSTEM_LOCAL_MACHINE) oder dem zur Zeit angemeldeten Benutzer (CERT_SYSTEM_STORE_CURRENT_USER) zur Verfügung stehen [1]. Diese beiden Eigenschaften beschreiben den Ort der Stores. In diesen Stores kann man aus folgenden vier physikalischen Stores wählen:
Physical Stores:
MY (persönliche Zertifikate) (default physical-store)
ROOT (Root Zertifikate)
ADDRESSBOOK (Zertifikate des Adressbuchs)
CA (CA Zertifikate)
2.Verwaltung der vertrauenswürdigen Benutzerzertifikate
Vertrauenswürdige Stammzertifikate können unter WinNT, Win2000 oder WinXP in zwei unterschiedlichen "Certificate Store Locations" abgelegt werden
LOCAL_MACHINE:Hier liegen "maschinenbezogene" Zertifikate die nur von Administratoren (oder Mitgliedern der Administratorengruppe) verändert und gelöscht werden können. Zertifikate aus dieser "Store Location" sind für alle Benutzer auch in der "Store Location" CURRENT_USER sichtbar und können von diesen Benutzern (sofern sie nicht Mitglied der Administratorengruppe sind) nicht verändert oder gelöscht werden. Löscht hingegen ein Administrator den "Link" eines Stammzertifikats aus seiner CURRENT_USER-Location und ist dieses Zertifikat "eigentlich" in LOCAL_MACHINE gespeichert, so wird dieses Zertifikat aus LOCAL_MACHINE entfernt und ist somit auch für alle Benutzer nicht mehr sichtbar. Insofern könnte man dieses Verhalten als "Vererbung" verstehen, da sich Änderungen der LOCAL_USER-Einstellung durch Administratoren (oder vielmehr Änderungen an Links auf Zertifikaten in LOCAL_MACHINE) direkt auf die CURRENT_USER-Einstellungen aller anderen Benutzer auswirken.
CURRENT_USER:
In dieser "Store Location" sind private vertrauenswürdige Stammzertifikate gespeichert. Stammzertifikate der LOCAL_MACHINE sind aber auch für alle Benutzer in ihren CURRENT_USER-Einstellungen sichtbar. Ist ein Benutzer kein Mitglied der Administratorengruppe, so kann er nur seine "eigenen" Zertifikate aus CURRENT_USER ändern oder löschen - nicht aber Zertifikate (oder vielmehr Links auf Zertifikate), die aus LOCAL_MACHINE übernommen wurden
3.Certificate Tool (commandline version)
Um nicht die Übernahme jedes einzelnen Zertifikates bestätigen zu müssen, kann mit der Option -a diese Abfrage übergangen werden. -s erzwingt eine Bestätigung (default).
3.1.copy_certs_from_system_store_to_file_store
- store2file.cpp (commandline version)
- store2file.exe ...hier muss mindestens ein Parameter übergeben werden (Filename) alle anderen Parameter sind optional. Werden Parameter nicht angegeben, so werden die entsprechenden default-Werte verwendet (siehe oben). Dabei muss der Filename der erste Parameter sein. Die Reihenfolge der anderen Parameter ist beliebig.
... öffnet eine beliebigen System Store (my, root, ca, addressbook) aus CERT_SYSTEM_STORE_CURRENT_USER. Aus diesem Store können Zertifikate ausgewählt werden. Danach werden diese Zertifikate in einen "File Store" kopiert und als File abgelegt.
3.2.copy_certs_from_file store_to_ system_store
- file2store.cpp (commandline version)
- file2store.exe ...hier muss mindestens ein Parameter übergeben werden (Filename) alle anderen Parameter sind optional. Werden Parameter nicht angegeben, so werden die entsprechenden default-Werte verwendet (siehe oben). Dabei muss der Filename der letzte Parameter sein. Die Reihenfolge der anderen Parameter ist beliebig.
... öffnet eine File Store, aus dem Zertifikate ausgewählt werden können, um sie zu einem frei wählbaren System Store (my, root, ca, addressbook) hinzuzufügen.
3.3.openstore and delete certs.cpp
- delete.cpp (commandline version)
- delete.exe ...hier muss kein Parameter
übergeben werden. Alle Parameter sind optional. Werden Parameter nicht
angegeben, so werden die entsprechenden default-Werte verwendet (siehe oben).CERT_STORE_PROV_FILE
wird noch nicht unterstützt - es wäre aber sicher sinnvoll, auch
aus einem File-Store bestimmte Zertifikate zu löschen.Da
Win2k und XP für eine korrekte Funktion folgende Zertifikate unbedingt
benötigen:
- Microsoft Timestamp Root
- Microsoft Authenticode(tm)Root
- Microsoft Root Authority
- VeriSign Time Stamping CA
- VeriSign Commercial Software Publishers CA
verfügt Delete über eine Abfrage des "Friendly Names" um ein irrtümliches Löschen dieser Zertifikate auszuschließen.
Weitere Informationen entnehmen Sie bitte folgenden Links: - http://support.microsoft.com/default.aspx?scid=kb;en-us;Q293781
- http://support.microsoft.com/default.aspx?scid=kb;en-us;Q293819
- http://support.microsoft.com/default.aspx?scid=kb;en-us;Q281458
- http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/news/rootcert.asp
... öffnet einen System Store, um bestimmte Zertifikate aus diesem Store zu löschen
4.Wie könnte ein Skript aussehen?
Delete.exe, file2store.exe und store2file.exe können auch aus einem beliebigen Skrip gestartet werden. Im File certsdemo.zip finden Sie einen BAT.File der zuerst eine Sicherungskopie aller wichtigen Stores anlegt (ca, root, personal und AddressBook der lokalen Mascine als auch des aktuellen Benutzers) um danach alle Root und CA Zertifikate zu löschen. Optional kann ein Set aus vorgefertigten Zertifikaten aus vorbereiteten File-Stores in die jeweiligen Systemstores kopiert werden. Die letzten Zeilen können verwendet werden, um den Ursprungszustand aller Stores wieder herzustellen.
Extrahieren Sie certsdemo.zip in ein beliebiges Verzeichnis und starten sie den Batch File:
certs.bat > certs.log
[1] müssen anderer Povider Typen unterstützt werden, so kann dies duch einfaches Anpassen der Source Codes geschehen.
