释放OpenSSL资源:SSL_CTX_free

时间:2014-10-31 15:43:10

标签: visual-c++ memory-management openssl

我正在从内存加载证书,将其添加到证书存储区,然后执行验证:

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);

基于代码:

  1. 只要需要base64EncodedCert,缓冲区BIO只需要在内存中,如documentation中所述。
  2. 创建证书后,将不再创建BIO并可以将其释放。这是一个观察;看着 X509 结构,这似乎是合理的。
  3. 我怀疑X509对象的所有权是通过X509_STORE_add_cert在证书存储上传递的。也就是说,我不需要跟踪新创建的证书,它会自动绑定到证书库的生命周期。
  4. 证书存储来自SSL上下文,因此其生命周期与SSL上下文(SSL_CTX)相关联。
  5. 因此,我的结论是,当我调用SSL_CTX_free时,我已经相应地释放了我添加到证书库的证书。
  6. 我说错了吗?还有其他内存考虑因素吗? 感谢您的时间和贡献。

1 个答案:

答案 0 :(得分:2)

数目:

  1. 是的,你是对的
  2. 是的,你是对的
  3. 是 - 只要X509_STORE_add_cert 成功。换句话说:如果X509_STORE_add_cert返回的值大于零,则证书存储上会传递X509对象的所有权;如果X509_STORE_add_cert返回 - 证书存储上传递了X509对象的所有权 - 您需要处理该问题。
  4. 是 - 如果证书存储来自SSL上下文
  5. 是的,你是对的
  6. 我希望有所帮助。