2014-10-31 155 views
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); 

基于代码:

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

我正确吗?有没有其他的记忆考虑? 谢谢你的时间和贡献。

回答

2

答案:

  1. 是的,你是正确的
  2. 是的,你是正确的
  3. 是 - 只要X509_STORE_add_certsucceded。换句话说:如果X509_STORE_add_cert返回值大于零 - X509对象的所有权传递给证书存储区;如果X509_STORE_add_cert返回 - 所有权的X509对象不是传递证书存储 - 您需要处理该问题。
  4. 是 - 如果证书存储来自SSL环境
  5. 是的,你是正确的

我希望帮助。

+0

你的回复当然有帮助!你会碰巧有任何参考吗? – Pooven 2014-11-04 06:37:47

+1

是的 - 我的参考资料是OpenSSL的源代码 - 我着眼于回答您的问题。 – sirgeorge 2014-11-04 21:38:40