0
我从存储器加载证书,将其添加到证书存储区,然后进行验证:释放OpenSSL的资源:SSL_CTX_free
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
我已添加到证书存储的证书相应地被释放。
我正确吗?有没有其他的记忆考虑? 谢谢你的时间和贡献。
你的回复当然有帮助!你会碰巧有任何参考吗? – Pooven 2014-11-04 06:37:47
是的 - 我的参考资料是OpenSSL的源代码 - 我着眼于回答您的问题。 – sirgeorge 2014-11-04 21:38:40