2014-10-31 143 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