对CERT_INFO结构进行编码

编码过程与解码 CERT_INFO结构中所述的解码过程相反。 例如,以下过程会将编码 的颁发者 添加到 CERT_INFO 结构。 另请参阅过程后面的图示。

将编码的颁发者添加到CERT_INFO结构

  1. 创建包含要使用的颁发者名称的字符串。
  2. 创建 CERT_RDN_ATTR 结构的数组,这些结构将被初始化为包含刚刚创建的颁发者名称字符串的正确信息。
  3. 创建 CERT_RDN 结构的数组,其中一个结构包含有关刚刚初始化 的CERT_RDN_ATTR 结构数组的信息。
  4. 创建 一个CERT_NAME_INFO 结构,该结构具有指向刚创建的 CERT_RDN 结构的数组的指针。
  5. 调用 CryptEncodeObject 以获取输出编码的 BLOB 的大小,并向其传递刚刚创建的 CERT_NAME_INFO 结构的地址。
  6. 为输出编码的 BLOB 分配内存。
  7. 再次调用 CryptEncodeObject ,向其传递相同的信息,但现在向其传递刚刚分配的内存的地址。
  8. CERT_INFO 结构的 Issuer.cbData 成员设置为步骤 5 中返回的大小,将 Issuer.pbData 成员设置为步骤 6 中获取的地址。 编码 的颁发者 BLOB 现在位于该处。

将编码的颁发者添加到证书信息结构

若要初始化和编码某些证书扩展信息,请使用以下过程。 另请参阅过程后面的图示。

将编码扩展信息添加到CERT_INFO结构

  1. 创建并初始化扩展信息结构 -对于此示例,它是 一个CERT_BASIC_CONSTRAINTS_INFO 结构。
  2. 调用 CryptEncodeObject,向其传递刚刚创建的结构的地址,以获取输出编码的 BLOB 的大小。
  3. 为输出编码的 BLOB 分配内存。
  4. 再次调用 CryptEncodeObject ,传递相同的信息,只是现在传入已分配内存的地址。
  5. 创建 CERT_EXTENSION 结构的数组。
  6. 初始化 CERT_EXTENSION 结构之一,以便 pszObjIdValue 中包含的数据的正确字符串,并且 Value 包含从调用 CryptEncodeObject 输出的加密数据 BLOB。
  7. 初始化 CERT_INFO 结构的 rgExtension 成员,使其指向CERT_EXTENSION结构的数组。

将编码的扩展信息添加到证书信息结构