【问题标题】:Releasing OpenSSL resources: SSL_CTX_free释放 OpenSSL 资源:SSL_CTX_free
【发布时间】: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);

根据代码:

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

我说的对吗?还有其他内存注意事项吗? 感谢您的时间和贡献。

【问题讨论】:

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


    【解决方案1】:

    答案:

    1. 是的,你是对的
    2. 是的,你是对的
    3. 是的 - 只要X509_STORE_add_cert 成功。换句话说:如果X509_STORE_add_cert 返回值大于零 - X509 对象的所有权 传递到证书存储;如果 X509_STORE_add_cert 返回 - X509 对象的所有权没有传递到证书存储区 - 你需要处理它。
    4. 是 - 如果证书存储来自 SSL 上下文
    5. 是的,你是对的

    希望对你有帮助。

    【讨论】:

    • 您的回复确实有帮助!你会碰巧有任何参考资料吗?
    • 是的 - 我的参考是 OpenSSL 的源代码 - 我看了它来回答你的问题。
    猜你喜欢
    • 2012-01-08
    • 2012-05-04
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多