我想使用 X509_STORE_set_verify_cb_func 来接收证书验证错误。然后我想将这些错误存储在一个列表中,并在 SSL_connect 返回后处理它。
但是我的应用程序是多线程的,我想避免这个回调的任何互斥锁。传递“空指针”或将其存储在 X509_STORE_CTX 某处的任何方法,以便我可以将错误存储在“正确”位置内,而不必使用全局错误列表并在执行 SSL_connect 时锁定它?
谢谢
AFAIK,您确实对此感到困惑-只需将其作为条目填入您自己的ID下即可。另一种选择是更通用地处理 SSL 回调 - 例如,参见 Apache 其 SSL 模块的 ssl_engine_kernel.c 中的 ssl_hook。虽然需要做更多的工作 - 它让您可以完全控制整个过程 - 并且完全在您的“自己的过程空间”中。
谢谢,
德。
如果您使用的是 C11 或更高版本,您可以定义一个全局 thread_local 变量
thread_local void * openssl_verify_context;
然后
此解决方案的优点是您无需了解 X509_STORE_CTX 背后的结构的详细信息(它隐藏在最新版本的 OpenSSL 中)。