OpenSSL:卸载当前可信证书并加载新证书文件

时间:2012-02-16 20:52:22

标签: openssl certificate ssl-certificate

假设我已经启动并运行了OpenSSL,并且我之前已经传入了一个文件,我将其称为包,其中包含使用SSL_CTX_load_verify_locations()的多个证书。

然后让我们说捆绑包得到更新,可能还有新证书和证书被删除。我希望OpenSSL基本上重新初始化以使用更新的bundle中的证书并停止使用它先前加载的旧证书。我的理解是SSL_CTX_load_verify_locations()只是附加到现有的可信证书集。

有谁知道如何让OpenSSL卸载它当前的可信证书集?我想避免重新启动所有内容,并且我还想避免在可能的情况下创建新的上下文实例。

谢谢!

1 个答案:

答案 0 :(得分: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'函数的源代码(crypto / x509 / x509_lu.c) - 它完全符合您的要求:它遍历所有'X509_LOOKUP *' 'SSL_CTX'中的对象并释放它们。另请查看上面提到的相应的'X509_STORE_load_locations'(crypto / x509 / x509_d2.c)。

警告:我没有尝试这样做(或任何类似的事情),我不确定SSL *对象(用于处理连接)或其他一些OpenSSL对象是否是不引用要重新初始化的数据。我建议先写一些简单的测试程序:)