2012-02-16 84 views
2

比方說,我有OpenSSL的啓動和運行,我已經在文件之前過去了,我會打電話給捆綁,包含使用SSL_CTX_load_verify_locations多個證書()。OpenSSL:已卸載當前受信任的證書和加載新的證書文件

然後我們假設捆綁包得到更新,可能會有新的證書以及證書被刪除。我希望OpenSSL實質上重新初始化以使用更新包中的證書並停止使用之前加載的舊證書。我的理解是SSL_CTX_load_verify_locations()只是附加到現有的一組可信任的證書。

有誰知道如何讓OpenSSL卸載它的當前一組可信任的證書嗎?我想避免重新啓動所有內容,並且我也希望儘可能避免創建新的上下文實例。

謝謝!

回答

0

我已經注意到你想要避免創建新的上下文,但它似乎是最乾淨和簡單的解決方案,因爲'SSL_CTX_load_verify_locations'將所有內容加載到'SSL_CTX'對象中,所以它不適用於整個圖書館。創建新的上下文並使用'SSL_CTX_load_verify_locations'重新初始化是最短的路徑。如果這不是那麼一個選項:

1) SSL_CTX_load_verify_locations(SSL_CTX * CTX,....)僅調用 'X509_STORE_load_locations(則將ctx-> cert_store)',其中 '則將ctx-> cert_store' 的類型爲「X509_STORE *」

2)我建議在看源代碼‘X509_STORE_free’功能(加密/ X509/x509_lu.c) - 它正是你想要的:它遍歷所有‘X509_LOOKUP *’對象'SSL_CTX'並釋放它們。同樣看看上面提到的相應的'X509_STORE_load_locations'(crypto/x509/x509_d2.c)。我不確定SSL *對象(用於處理連接)還是其他一些OpenSSL對象沒有引用數據時(我沒有試過這樣做(或任何類似),我不確定如果SSL *對象(用於處理連接)或其他一些OpenSSL對象不引用數據你想重新初始化。我會建議先寫一些簡單的測試程序:)