解码CERT_INFO结构

给定证书后,解码证书 BLOB 的第一步是调用 CertCreateCertificateContext,向其传递指向编码证书的指针 (BLOB) 。 调用此函数时,它会创建编码证书的副本,创建 CERT_CONTEXT 类型的结构,并创建 CERT_INFO 类型的结构。 如下图所示, 证书上下文 包括原始证书 BLOBCERT_CONTEXT 类型的 C 结构和 CERT_INFO 类型的 C 结构。 CERT_CONTEXT 结构的成员之一指向CERT_INFO结构,另一个成员指向编码的证书 BLOB。

证书上下文

(数据成员) 的编码对象始终作为 CryptDecodeObject 函数的输入提供,输出是一个 C 结构,该结构可能具有编码成员,也可能没有编码成员,具体取决于进程进度。

还有一个需要一些解码的另一个成员,即 扩展 成员。 虽然它不是 在CERT_INFO 级别编码的,但它确实包含一些编码的信息。 若要解码此信息,请按下图所示继续操作。

解码信息

CERT_INFO 结构中,成员 rgExtension 是指向 CERT_EXTENSION 结构数组的指针。 每个 CERT_EXTENSION 结构都有一个 Value 成员,该成员采用编码形式,需要解码。 Value 成员将传递给 CryptDecodeObject 函数,然后函数的输出取决于 pszObjId 成员的值。 请注意,在图中,将生成两个不同的结构,一个 是类型CERT_BASIC_CONSTRAINTS_INFO ,另一个是 CERT_AUTHORITY_KEY_ID_INFO类型,具体取决于 pszObjId 的值。