Erweiterungshandler
Ab X.509 Zertifikatformat Version 3 kann ein Zertifikat Zertifikaterweiterungen enthalten. (Informationen zum Inhalt eines X.509-Zertifikats finden Sie unter Zertifikateigenschaften.) Diese Erweiterungen geben zusätzliche Informationen an. Eine Erweiterung kann z. B. zusätzliche Informationen zur Antragstelleridentifikation angeben oder wichtige Verwendungsinformationen angeben, die die Aufgaben (z. B. Signatur oder Verschlüsselung) angeben, für die ein Schlüssel verwendet werden kann. Eine Reihe von Standarderweiterungen wird für die Anwendungsverwendung definiert, und Erweiterungen können ebenfalls angepasst werden.
Jede Erweiterung verfügt über eine zugeordnete Objektbezeichnerzeichenfolge, die den Typ zusätzlicher Informationen und eine Datenstruktur identifiziert, die diese Informationen enthält. Der Schlüsselverwendungsobjektbezeichner ist z. B. "2.5.29.15", der wichtige Verwendungsinformationen angibt. Die zugeordnete Datenstruktur ist eine CRYPT_BIT_BLOB (Bitfeld), die angibt, wie der Schlüssel verwendet werden kann.
Eine Erweiterung kann einem Zertifikat hinzugefügt werden, bevor sie ausgestellt wird. Wenn das Zertifikat ausgestellt wird, sind alle aktivierten Erweiterungen Teil des Zertifikats. Wenn eine Erweiterung als kritisch gekennzeichnet ist, muss die Verwendung durch die verwendungsanwendung bekannt sein, und die Anwendung muss die Absicht oder den Wert der Erweiterung einhalten. Zertifikatdienste ermöglichen das Festlegen von Erweiterungen für ein nicht ausgestelltes Zertifikat über Methoden, die von ICertAdmin und ICertServerPolicybereitgestellt werden. Ausführliche Informationen zu Zertifikaterweiterungen finden Sie in der CryptoAPI-Dokumentation CERT_EXTENSION. Informationen zu allgemeinen Zertifikaterweiterungsdatenstrukturen finden Sie unter X.509 Certificate Extension Structures.
Der Erweiterungshandler ist ein COM-Objekt, das Routinen zum Codieren der komplexeren, aber häufig verwendeten Erweiterungen und Datentypen bereitstellt, z. B. IA5String oder PrintableString.
Erweiterungen mit den Datentypen DATE, LONGund BSTR- erfordern keinen Erweiterungshandler. Das Richtlinienmodul ruft einfach ICertServerPolicy::SetCertificateExtension auf, wobei der parameter Type auf einen Wert festgelegt ist, der den Erweiterungsdatentyp darstellt: PROPTYPE_DATE, PROPTYPE_LONG oder PROPTYPE_STRING. Anschließend wird die Erweiterung an das Servermodul übergeben. Das Servermodul führt wiederum die abstrakte Syntaxnotation One (ASN.1)-Codierung aus, bevor die Erweiterung im Zertifikat gespeichert wird.
Erweiterungen mit anderen Datentypen als diesen Standardtypen müssen jedoch ASN.1 durch einen Erweiterungshandler codiert werden, bevor das Richtlinienmodul sie an das Servermodul übergibt. Wenn das Richtlinienmodul ICertServerPolicy::SetCertificateExtension aufruft, um eine ASN.1-codierte Erweiterung an das Servermodul zu übergeben, muss der Parameter Type auf PROPTYPE_BINARY festgelegt werden. Das Servermodul speichert diese codierte Erweiterung dann einfach im Zertifikat.
Der standardmäßige Erweiterungshandler Certenc.dllexportiert eine Reihe von ICertEncodeXXX- Schnittstellen und kann vom Richtlinienmodul aufgerufen werden. Die erforderlichen Typinformationen sind auch in Certencl.dll enthalten, die im Platform Software Development Kit (SDK) bereitgestellt werden. Jede Schnittstelle stellt eine Encode Methode bereit, die eine ASN.1-codierte Zertifikaterweiterung an das Richtlinienmodul in einem Binärformat zurückgibt. Das Richtlinienmodul kann dann die Erweiterung in einem Zertifikat festlegen, indem die ICertServerPolicy::SetCertificateExtension Methode aufgerufen wird.
Weitere Informationen finden Sie unter Schreiben von benutzerdefinierten Erweiterungshandlern.