【问题标题】:OpenSSL: How to supply a custom pointer to the certificate verification callbackOpenSSL:如何提供指向证书验证回调的自定义指针
【发布时间】:2011-05-07 20:16:29
【问题描述】:
我想使用 X509_STORE_set_verify_cb_func 来接收证书验证错误。然后我想将这些错误存储在一个列表中,并在 SSL_connect 返回后处理它。
但是我的应用程序是多线程的,我想避免这个回调的任何互斥锁。有什么方法可以传递“空指针”或将其存储在 X509_STORE_CTX 的某个位置,这样我就可以将错误存储在“正确”位置,而不必在执行 SSL_connect 时使用全局错误列表并锁定它?
谢谢
【问题讨论】:
标签:
ssl
callback
openssl
x509
【解决方案1】:
如果你使用的是 C11 或更高版本,你可以定义一个全局 thread_local 变量
thread_local void * openssl_verify_context;
然后
- 在设置回调之前设置 openssl_verify_context(即在 X509_STORE_set_verify_cb_func 之前)。
- 在回调中使用 openssl_verify_context。
- 如果需要,在验证证书后(即 PKCS7_dataVerify 后)读取并取消设置 openssl_verify_context。
此解决方案的优点是您无需了解 X509_STORE_CTX 背后的结构的详细信息(在最新版本的 OpenSSL 中隐藏)。
【解决方案2】:
AFAIK,您确实对此感到困惑-只需将其作为条目填入您自己的 ID 下即可。另一种选择是更通用地处理 SSL 回调 - 例如,参见 Apache 其 SSL 模块的 ssl_engine_kernel.c 中的 ssl_hook。虽然还有更多工作 - 它让您可以完全控制整个过程 - 并且完全在您的“自己的过程空间”中。
谢谢,
Dw.