2011-02-01 65 views
4

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

的问题是,它不匹配与由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对象。您仍然无法恢复私钥。

+0

哎呀!就在我面前的整个时间:),谢谢你,我永远也不会以其他方式找到这一点,我有我的心中对使用CryptEncodeObject功能设置。我不需要私钥,我使用公钥编码作为签名操作的源数据。 – 2011-02-01 21:20:02