Codificação e decodificação de um contexto de certificado
CryptoAPI dá suporte à codificação e decodificação de certificados. CryptoAPI inclui um sistema extensivo e flexível de funções e estruturas C que permitem codificação e decodificação de várias maneiras. CryptoAPI dá suporte à estrutura de certificado X.509 padrão e à codificação padrão asn.1 ( notação de sintaxe abstrata ) padrão para fornecer interoperabilidade com outros sistemas.
Para obter uma visão geral dos dados codificados, consulte Dados codificados e decodificados.
Contextos de certificado
Um contexto de certificado, CERT_CONTEXT, é uma estrutura C que contém um membro codificado, um identificador para um repositório de certificados, um ponteiro para o BLOB de certificado codificado original e um ponteiro para uma estrutura CERT_INFO C.
A estrutura CERT_INFO é o coração do certificado. Ele contém, em forma direta e em formato codificado, todas as informações básicas no certificado. A ilustração a seguir mostra a estrutura CERT_INFO com todos os seus membros codificados mostrados como sombreados.
Os membros IssuerUniqueID e SubjectUniqueID fazem 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 decodificados. Use CryptDecodeObject para decodificar esses membros. A ilustração a seguir mostra o processo de decodificação de um desses membros.
No caso ilustrado, a função CryptDecodeObject cria uma estrutura CERT_NAME_INFO , uma matriz de estruturas CERT_RDN , uma matriz correspondente de estruturas de 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 terminada em zero. Se for CERT_RDN_UNICODE_STRING, a cadeia de caracteres será uma cadeia de caracteres de largura dupla (tamanho de palavra).
Para obter um processo detalhado para codificar e decodificar certificados, consulte Codificando uma estrutura de CERT_INFO e decodificação de uma estrutura de CERT_INFO.