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

标签 c++ openssl cryptoapi x509 asn.1

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

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

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

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

最佳答案

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

关于c++ - 在 Windows CryptoAPI 和 OpenSSL x509 格式之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866672/

相关文章:

c++ - 从给定的 map 迭代器反向迭代

python - 找不到 openssl 库

.net - Windows CNG 自定义 key 存储提供程序

c++ - Openfiledialog 在显示过程中挂起

c++ - 逗号运算符和逗号分隔符有什么区别?

php - PHP 7.1 及更高版本的数据加密/解密

c++ - CURLpp:TLS 握手错误

python - 是否有 python 模块可以通过证书存储中的 RSA key 对来签名和验证数据?

cryptoapi - Microsoft 是否提供连接到其自己的 MS CryptoAPI 的 PKCS #11 提供程序?

c++ - 如何检查一个变量是否不等于 C++ 中的多个东西?