1

我想使用 X509_STORE_set_verify_cb_func 来接收证书验证错误。然后我想将这些错误存储在一个列表中,并在 SSL_connect 返回后处理它。

但是我的应用程序是多线程的,我想避免这个回调的任何互斥锁。传递“空指针”或将其存储在 X509_STORE_CTX 某处的任何方法,以便我可以将错误存储在“正确”位置内,而不必使用全局错误列表并在执行 SSL_connect 时锁定它?

谢谢

4

2 回答 2

0

AFAIK,您确实对此感到困惑-只需将其作为条目填入您自己的ID下即可。另一种选择是更通用地处理 SSL 回调 - 例如,参见 Apache 其 SSL 模块的 ssl_engine_kernel.c 中的 ssl_hook。虽然需要做更多的工作 - 它让您可以完全控制整个过程 - 并且完全在您的“自己的过程空间”中。

谢谢,

德。

于 2010-12-01T14:56:21.220 回答
0

如果您使用的是 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 中)。

于 2021-10-06T10:28:23.967 回答