【问题标题】:How to parse a CSR object using openssl API如何使用 openssl API 解析 CSR 对象
【发布时间】:2019-09-10 09:12:52
【问题描述】:

我有一个包含 CSR 文件内容的 std::string。 问题是我找不到将这个字符串解析为对象的方法。 我已经尝试过post 的答案,但它们仅适用于文件。

我目前正在使用这种方法,但它总是返回 NULL。

const unsigned char * certChar = reinterpret_cast<const unsigned char*>(certStr.c_str());

X509* csr = d2i_X509(NULL, &certChar, certStr.size());
if (csr == NULL)
{
        std::cout << "Return value was NULL" << std::endl;
}

内存中加载的文件是一个.CSR,内容放入certStr std::string。

使用 ERR_get_error() 方法,我得到以下错误:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

【问题讨论】:

  • 文档建议您可以将ERR_get_errorERR_error_string 一起使用以查看问题所在。这给你任何线索吗?
  • @Botje 首先感谢您提供这些宝贵的信息!所以,我得到了以下错误: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 。我想我的格式不好。我检查并看到字符串中有“\n”。但即使将它们删除,它仍然无法正常工作。
  • 那么certStr 是什么样的?如果你把它写到一个文件中,openssl x509 可以用它做点什么吗?
  • 如果您的certStr 实际上是PEM 格式(例如它以-----BEGIN CERTIFICATE REQUEST----- 开头),您需要先从PEM 解码它。我认为您可以将BIO_new_mem_bufPEM_read_bio_X509_REQ 一起使用。

标签: c++ openssl csr


【解决方案1】:

感谢 Botje,我想出了如何让它发挥作用。

BIO* bio = BIO_new_mem_buf(reinterpret_cast<const void*>(certStr.c_str()),certStr.size());
X509_REQ* csr;
PEM_read_bio_X509_REQ(bio, &csr, NULL, NULL);

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 2013-02-24
    • 1970-01-01
    • 2016-11-20
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2014-08-12
    相关资源
    最近更新 更多