【发布时间】:2014-10-31 15:43:09
【问题描述】:
我正在从内存中加载证书,将其添加到证书存储区,然后执行验证:
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 上下文,因此其生命周期与 SSL 上下文 (
SSL_CTX) 相关联。 - 因此我的结论是,当我调用
SSL_CTX_free时,我添加到证书存储中的证书会相应地释放。
我说的对吗?还有其他内存注意事项吗? 感谢您的时间和贡献。
【问题讨论】:
标签: visual-c++ memory-management openssl