Controladores de extensión

A partir de la versión 3 del formato de certificado X.509 , un certificado puede contener extensiones de certificado. (Para obtener el contenido de un certificado X.509, vea Propiedades del certificado). Estas extensiones indican información adicional. Por ejemplo, una extensión puede indicar información adicional de identificación del sujeto o puede indicar información de uso de claves, que especifica las tareas (como la firma o el cifrado) para las que se puede usar una clave. Se define un conjunto de extensiones estándar para el uso de aplicaciones y también se pueden personalizar extensiones.

Cada extensión tiene una cadena de identificador de objeto asociada que identifica el tipo de información adicional y una estructura de datos que contiene esta información. Por ejemplo, el identificador de objeto de uso de clave es "2.5.29.15", que indica información de uso de claves. Su estructura de datos asociada es un CRYPT_BIT_BLOB (campo de bits) que especifica cómo se puede usar la clave.

Se puede agregar una extensión a un certificado antes de que se emita. Cuando se emite el certificado, las extensiones habilitadas forman parte del certificado. Si una extensión está marcada como crítica, su uso debe conocerse mediante la aplicación using y la aplicación debe cumplir la intención o el valor de la extensión. Certificate Services permite establecer extensiones en un certificado no emitido a través de métodos proporcionados por ICertAdmin e ICertServerPolicy. Para más información sobre las extensiones de certificado, consulte CERT_EXTENSION en la documentación de CryptoAPI. Para obtener información sobre las estructuras de datos comunes de extensión de certificado, vea Estructuras de extensión de certificado X.509.

El controlador de extensión es un objeto COM que proporciona rutinas para codificar los tipos de datos y extensiones más complejos, pero que se suelen usar, como IA5String o PrintableString.

Las extensiones que tienen los tipos de datos DATE, LONG y BSTR no requieren un controlador de extensión. El módulo de directiva simplemente llama a ICertServerPolicy::SetCertificateExtension con el parámetro Type establecido en un valor que representa el tipo de datos de extensión: PROPTYPE_DATE, PROPTYPE_LONG o PROPTYPE_STRING. A continuación, pasa la extensión al motor de servidor. A su vez, el motor de servidor realiza la codificación Abstract Syntax Notation One (ASN.1) antes de almacenar la extensión en el certificado.

Sin embargo, las extensiones que tienen tipos de datos distintos de estos tipos predeterminados deben estar codificadas por un controlador de extensión antes de que el módulo de directivas los pase al motor de servidor. Cuando el módulo de directiva llama a ICertServerPolicy::SetCertificateExtension para pasar una extensión codificada por ASN.1 al motor de servidor, debe establecer el parámetro Type en PROPTYPE_BINARY. A continuación, el motor de servidor simplemente almacena esta extensión codificada en el certificado.

El controlador de extensión predeterminado, Certenc.dll, exporta una serie de interfaces ICertEncodeXXX y el módulo de directivas puede llamar a él. La información de tipo necesaria también se incluye en Certencl.dll que se proporciona en el Kit de desarrollo de software de plataforma (SDK). Cada interfaz proporciona un método Encode que devuelve una extensión de certificado con codificación ASN.1 al módulo de directivas en un formato binario. Después, el módulo de directiva puede establecer la extensión en un certificado llamando al método ICertServerPolicy::SetCertificateExtension .

Para obtener más información, consulte Escritura de controladores de extensiones personalizados.