Compartir a través de


Descodificación de una estructura de CERT_INFO

Dado un certificado, el primer paso para descodificar el BLOB del certificado es llamar a CertCreateCertificateContext, pasando un puntero al certificado codificado (BLOB). Cuando se llama a esta función, crea un duplicado del certificado codificado, crea una estructura de tipo CERT_CONTEXT y crea una estructura de tipo CERT_INFO. Como se muestra en la ilustración siguiente, un contexto de certificado incluye el BLOB de certificado original, una estructura C de tipo CERT_CONTEXT y una estructura C de tipo CERT_INFO. Uno de los miembros de la estructura de CERT_CONTEXT apunta a la estructura CERT_INFO y otra al BLOB de certificado codificado.

contexto de certificado

El objeto codificado (miembro de datos) siempre se proporciona como entrada a la función CryptDecodeObject y la salida es una estructura de C que puede o no tener miembros codificados, dependiendo de la distancia en el proceso que esté.

Hay otro miembro que requiere cierta descodificación y que es el miembro Extension . Aunque no está codificado en el nivel de CERT_INFO , contiene información codificada. Para descodificar esta información, continúe como se muestra en la ilustración siguiente.

descodificación de información

En la estructura CERT_INFO , el miembro rgExtension es un puntero a una matriz de estructuras de CERT_EXTENSION . Cada estructura CERT_EXTENSION tiene un miembro Value que está en formato codificado y debe descodificarse. El miembro Value se pasa a la función CryptDecodeObject y, a continuación, la salida de la función depende del valor del miembro pszObjId . Observe que en la ilustración se generan dos estructuras diferentes, una de tipo CERT_BASIC_CONSTRAINTS_INFO y una de tipo CERT_AUTHORITY_KEY_ID_INFO, según el valor de pszObjId.