在Windows CryptoAPI和OpenSSL x509格式之间转换

Gea*_*phy 4 c++ openssl asn.1 cryptoapi x509

我有一个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证书创建例程出现问题.

如果有人能就这些问题提供任何见解/建议/提示,我会非常感激.

小智 6

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