Partilhar via


Decodificando uma estrutura CERT_INFO

Dado um certificado, a primeira etapa para descodificar o certificado BLOB é chamar CertCreateCertificateContext, passando-lhe um ponteiro para o certificado codificado (BLOB). Quando essa função é chamada, ela cria uma duplicata do certificado codificado, cria uma estrutura do tipo CERT_CONTEXTe cria uma estrutura do tipo CERT_INFO. Conforme mostrado na ilustração a seguir, um de contexto de certificado inclui o certificado original BLOB, uma estrutura de C do tipo CERT_CONTEXTe uma estrutura de C do tipo CERT_INFO. Um dos membros da estrutura CERT_CONTEXT aponta para a estrutura CERT_INFO e outro para o BLOB do certificado codificado.

contexto do certificado

O objeto codificado (membro de dados) é sempre fornecido como a entrada para a funçãoCryptDecodeObject, e a saída é uma estrutura C que pode ou não ter membros codificados, dependendo de quão longe no processo você está.

Há outro membro que requer alguma descodificação, que é o membro de extensão . Embora não seja codificado no nível CERT_INFO, ele contém algumas informações codificadas. Para decodificar essas informações, prossiga como mostrado na ilustração a seguir.

informações de decodificação

Na estrutura CERT_INFO, o membro rgExtension é um ponteiro para uma matriz de estruturas CERT_EXTENSION. Cada estrutura CERT_EXTENSION tem um membro Value que está na forma codificada e precisa ser descodificado. O membro Value é passado para a função CryptDecodeObject e, em seguida, a saída da função depende do valor do membro pszObjId. Observe que na ilustração, duas estruturas diferentes são produzidas, uma do tipo CERT_BASIC_CONSTRAINTS_INFO e outra do tipo CERT_AUTHORITY_KEY_ID_INFO, dependendo do valor de pszObjId.