Gestionnaires d’extensions
À compter de X.509 format de certificat version 3, un certificat peut contenir des extensions de certificat. (Pour connaître le contenu d’un certificat X.509, consultez Propriétés du certificat.) Ces extensions indiquent des informations supplémentaires. Par exemple, une extension peut indiquer des informations d’identification d’objet supplémentaires ou indiquer des informations d’utilisation clés, qui spécifient les tâches (telles que la signature ou le chiffrement) pour lesquelles une clé peut être utilisée. Un ensemble d’extensions standard est défini pour l’utilisation de l’application, et les extensions peuvent également être personnalisées.
Chaque extension a une chaîne d’identificateur d’objet associée qui identifie le type d’informations supplémentaires et une structure de données qui contient ces informations. Par exemple, l’identificateur d’objet d’utilisation de clé est « 2.5.29.15 », ce qui indique les informations d’utilisation des clés. Sa structure de données associée est une CRYPT_BIT_BLOB (champ de bits) spécifiant la façon dont la clé peut être utilisée.
Une extension peut être ajoutée à un certificat avant son émission. Lorsque le certificat est émis, toutes les extensions activées font partie du certificat. Si une extension est marquée comme critique, son utilisation doit être connue par l’application utilisant et l’application doit respecter l’intention ou la valeur de l’extension. Les services de certificats permettent aux extensions d’être définies sur un certificat non émis via des méthodes fournies par ICertAdmin et ICertServerPolicy . Pour plus d’informations sur les extensions de certificat, consultez CERT_EXTENSION dans la documentation CryptoAPI. Pour plus d’informations sur les structures de données d’extension de certificat courantes, consultez structures d’extension de certificat X.509.
Le gestionnaire d’extensions est un objet COM qui fournit des routines pour l’encodage des extensions et types de données les plus complexes, mais couramment utilisés, tels que IA5String ou PrintableString.
Les extensions qui ont les types de données DATE, LONGet BSTR ne nécessitent pas de gestionnaire d’extensions. Le module de stratégie appelle simplement ICertServerPolicy ::SetCertificateExtension avec le paramètre Type défini sur une valeur représentant le type de données d’extension : PROPTYPE_DATE, PROPTYPE_LONG ou PROPTYPE_STRING. Il transmet ensuite l’extension au moteur de serveur. Le moteur de serveur effectue à son tour l’encodage Syntaxe abstraite (ASN.1) avant de stocker l’extension dans le certificat.
Toutefois, les extensions qui ont des types de données autres que ces types par défaut doivent être codées par ASN.1 par un gestionnaire d’extensions avant que le module de stratégie ne les passe au moteur de serveur. Lorsque le module de stratégie appelle ICertServerPolicy ::SetCertificateExtension pour passer une extension encodée ASN.1 au moteur de serveur, il doit définir le paramètre Type sur PROPTYPE_BINARY. Le moteur de serveur stocke ensuite simplement cette extension encodée dans le certificat.
Le gestionnaire d’extensions par défaut, Certenc.dll, exporte un certain nombre d’interfaces ICertEncodeXXX et peut être appelé par le module de stratégie. Les informations de type nécessaires sont également contenues dans Certencl.dll fournies dans le Kit de développement logiciel (SDK) de plateforme. Chaque interface fournit un méthode encode qui retourne une extension de certificat encodée ASN.1 au module de stratégie dans un format binaire. Le module de stratégie peut ensuite définir l’extension dans un certificat en appelant la méthode ICertServerPolicy ::SetCertificateExtension.
Pour plus d’informations, consultez Écriture de gestionnaires d’extensions personnalisées.