4

我有一个CERT_CONTEXT结构,它是通过 CryptoAPI 从 Windows 上的智能卡中提取的。我需要将此结构转换为与 OpenSSL 一致的 DER 编码字节数组。到目前为止,我得到的最接近的匹配是通过CryptEncodeObject使用 X509_ASN_ENCODING 和 X509_CERT_TO_BE_SIGNED 修饰符,该修饰符将CERT_INFO结构作为输入。

问题是它与 OpenSSL i2d_X509函数产生的输出不匹配。使用 2048 位 x509 证书作为输入,OpenSSL 产生 1789 字节的编码输出,而 Windows CryptoAPI 产生 1638 字节的编码输出。

我能看到的唯一选择是使用CERT_CONTEXT结构中的值动态创建 X509 证书,并直接使用i2d_X509函数对生成的对象进行编码。唯一的问题是我无法从智能卡中提取私钥,因此这可能会导致 x509 证书创建例程出现问题。

如果有人可以就这些问题提供任何见解/建议/提示,我将不胜感激。

4

1 回答 1

6

可以从 (ctx->pbCertEncoded, ctx->cbCertEncoded) 缓冲区获取 DER 编码证书,其中 ctx 是 PCCERT_CONTEXT 对象。您仍然无法恢复私钥。

于 2011-02-01T19:13:12.813 回答