Codificación y descodificación de un contexto de certificado
CryptoAPI admite la codificación y descodificación de certificados. CryptoAPI incluye un amplio sistema flexible de funciones y estructuras de C que permiten codificar y descodificar de varias maneras. CryptoAPI admite la estructura de certificados X.509 estándar y la codificación de notación de sintaxis abstracta estándar (ASN.1) para proporcionar interoperabilidad con otros sistemas.
Para obtener información general sobre los datos codificados, consulte Datos codificados y descodificados.
Contextos de certificado
Un contexto de certificado, CERT_CONTEXT, es una estructura de C que contiene un miembro codificado, un identificador para un almacén de certificados, un puntero al BLOB de certificado codificado original y un puntero a una estructura de C CERT_INFO .
La estructura CERT_INFO es el corazón del certificado. Contiene, en forma directa y en forma codificada, toda la información básica del certificado. En la ilustración siguiente se muestra la estructura CERT_INFO con todos sus miembros codificados como sombreados.
Los miembros IssuerUniqueID y SubjectUniqueID forman parte de la implementación del certificado X.509 versión 2, pero rara vez se usan. Las extensiones de certificado de la versión 3 reemplazan la funcionalidad de estos miembros.
Si se necesita la información contenida en los miembros codificados (sombreados) Emisor y Asunto , esos miembros deben descodificarse. Use CryptDecodeObject para descodificar estos miembros. En la ilustración siguiente se muestra el proceso de descodificación de uno de estos miembros.
En el caso ilustrado, la función CryptDecodeObject crea una estructura CERT_NAME_INFO , una matriz de estructuras de CERT_RDN , una matriz correspondiente de estructuras de CERT_RDN_ATTR y una cadena que contiene el nombre. Los miembros de la estructura CERT_RDN_ATTR determinan el contenido de la cadena. Por ejemplo, si el miembro pszObjId es 2.5.4.3, la cadena contiene un nombre común. Si es 2.5.4.10, la cadena contendrá un nombre de organización. Para obtener una lista de estos identificadores de objeto (OID), consulte CERT_RDN_ATTR.
El miembro dwValueType contiene información sobre el tipo de cadena. Si es CERT_RDN_PRINTABLE_STRING, el miembro de valor contiene una cadena de caracteres terminada en cero de ancho de bytes. Si es CERT_RDN_UNICODE_STRING, la cadena es una cadena de caracteres de doble ancho (tamaño de palabra).
Para obtener un proceso detallado para codificar y descodificar certificados, consulte Codificación de una estructura de CERT_INFO y descodificación de una estructura de CERT_INFO.