【问题标题】:Converting between Windows CryptoAPI and OpenSSL x509 formats在 Windows CryptoAPI 和 OpenSSL x509 格式之间转换
【发布时间】:2011-02-01 18:49:18
【问题描述】:

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

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

【问题讨论】:

    标签: c++ openssl cryptoapi x509 asn.1


    【解决方案1】:

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

    【讨论】:

    • 啊!,一直在我面前 :),谢谢,否则我永远不会找到这个,我已经下定决心使用 CryptEncodeObject 函数。我不需要私钥,我使用公钥编码作为签名操作的源数据。
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 2015-05-29
    • 2019-06-12
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多