我正在从内存加载证书,将其添加到证书存储区,然后执行验证:
char base64EncodedCert[] = "...";
const int autoDetermineLength = -1;
BIO* memoryCert = BIO_new_mem_buff(base64EncodedCert, autoDetermineLength);
X509* certificate = PEM_read_bio_X509(memoryCert, nullptr, 0, nullptr);
BIO_free(sslCompatibleMemoryCert);
X509_STORE_add_cert(certificateStore, certificate);
基于代码:
base64EncodedCert
,缓冲区BIO
只需要在内存中,如documentation中所述。BIO
并可以将其释放。这是一个观察;看着 X509 结构,这似乎是合理的。X509
对象的所有权是通过X509_STORE_add_cert
在证书存储上传递的。也就是说,我不需要跟踪新创建的证书,它会自动绑定到证书库的生命周期。SSL_CTX
)相关联。SSL_CTX_free
时,我已经相应地释放了我添加到证书库的证书。我说错了吗?还有其他内存考虑因素吗? 感谢您的时间和贡献。
答案 0 :(得分:2)
数目:
X509_STORE_add_cert
成功。换句话说:如果X509_STORE_add_cert
返回的值大于零,则证书存储上会传递X509
对象的所有权;如果X509_STORE_add_cert
返回零 - 证书存储上传递了X509
对象的所有权 - 您需要处理该问题。我希望有所帮助。