Partager via


Gestionnaires d’extensions

À compter du format de certificat X.509 version 3, un certificat peut contenir des extensions de certificat. (Pour 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 de sujet supplémentaires, ou elle peut indiquer des informations d’utilisation de clé, 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 de l’objet d’utilisation de la clé est « 2.5.29.15 », ce qui indique des informations sur l’utilisation de la clé. Sa structure de données associée est un CRYPT_BIT_BLOB (champ de bits) spécifiant comment 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 qui utilise et l’application doit respecter l’intention ou la valeur de l’extension. Les services de certificats permettent de définir des extensions 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 des 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, LONG et 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, à son tour, effectue l’encodage ASN.1 ( Abstract Syntax Notation One ) 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 encodées 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 qui est fourni dans le Kit de développement logiciel (SDK) de plateforme. Chaque interface fournit une 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és.