C ++ / OpenSSL加载PEM奇怪的行为

时间:2018-06-07 08:21:45

标签: c++ openssl

我已经完成了从PEM QString加载x509的功能。 这个函数适用于大多数证书,但对某些人来说有一个奇怪的行为:

X509* Certificat::stringPEMToX509(QString* stringPem)
{


X509* certificat;

BIO* bio = BIO_new(BIO_s_mem());

const char* pem = stringPem->toAscii().constData();
BIO_puts(bio, pem); 

certificat = PEM_read_bio_X509(bio, NULL, NULL, NULL);

if (certificat == NULL)
{
    //Here is the problem
    //Sometimes OpenSSL just return "no start line"
    //But after 3 or 4 tries, it work and load the PEM into the x509

    return Certificat::stringPEMToX509(stringPem);


}

BIO_free_all(bio);

return certificat;

}

有时OpenSSL不想加载我的PEM并且PEM_read_bio_X509返回NULL,但如果我再次尝试3或4次(有时更少,有时更多),它将起作用。 如果我在返回NULL时检查ERR_reason_error_string(err),则会收到no start line错误。

这是为什么?它看起来完全随机。 我犯了什么错误吗?

我知道简单地一遍又一遍地回忆这个函数是不好的,因为如果问题持续存在会产生一个无限循环,但那不是主题,我会在以后做一个for循环。

0 个答案:

没有答案