Partilhar via


Codificando e decodificando um contexto de certificado

CryptoAPI suporta a codificação e decodificação de certificados . CryptoAPI inclui um sistema extenso e flexível de funções e estruturas C que permitem a codificação e decodificação de várias maneiras. A CryptoAPI suporta estrutura de certificado de X.509 padrão e codificação padrão Abstract Syntax Notation One (ASN.1) para fornecer interoperabilidade com outros sistemas.

Para obter uma visão geral dos dados codificados, consulte Dados codificados e decodificados.

Contextos de Certificados

Um contexto de certificado , CERT_CONTEXT, é uma estrutura C que contém um membro codificado, um identificador para um armazenamento de certificados , um ponteiro para o BLOB de certificado original codificado , e um ponteiro para uma estrutura C CERT_INFO.

A estrutura CERT_INFO é o coração do certificado. Contém, de forma direta e codificada, todas as informações de base constantes do certificado. A ilustração a seguir mostra a estrutura CERT_INFO com todos os seus membros codificados mostrados como sombreados.

estrutura cert-info

Os membros IssuerUniqueID e SubjectUniqueID são parte da implementação do certificado X.509 versão 2, mas raramente são usados. As extensões de certificado na versão 3 substituem a funcionalidade desses membros.

Se as informações contidas nos membros codificados (sombreados) Emissor e Assunto forem necessárias, esses membros deverão ser descodificados. Use CryptDecodeObject para decodificar esses membros. A ilustração a seguir mostra o processo de decodificação de um desses membros.

decodificação com cryptdecodeobject

No caso ilustrado, a funçãoCryptDecodeObject cria uma estrutura CERT_NAME_INFO, uma matriz de estruturas CERT_RDN, uma matriz correspondente de estruturas CERT_RDN_ATTR e uma cadeia de caracteres que contém o nome. Os membros da estrutura CERT_RDN_ATTR determinam o conteúdo da cadeia de caracteres. Por exemplo, se o membro pszObjId for 2.5.4.3, a cadeia de caracteres conterá um nome comum. Se for 2.5.4.10, a cadeia de caracteres conterá um nome de organização. Para obter uma lista desses identificadores de objeto (OIDs), consulte CERT_RDN_ATTR.

O membro dwValueType contém informações sobre o tipo de cadeia de caracteres. Se for CERT_RDN_PRINTABLE_STRING, o membro do valor conterá uma cadeia de caracteres com largura de byte e terminação zero. Se for CERT_RDN_UNICODE_STRING, a string é uma sequência de caracteres com largura dupla (no tamanho de uma palavra).

Para obter um processo detalhado de codificação e decodificação de certificados, consulte Encoding a CERT_INFO Structure e Decoding a CERT_INFO Structure.