【发布时间】: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_error与ERR_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_buf与PEM_read_bio_X509_REQ一起使用。