【问题标题】: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.

      【讨论】:

        猜你喜欢
        • 2012-11-09
        • 1970-01-01
        • 2013-02-28
        • 2013-08-09
        • 2015-12-28
        • 2012-03-24
        • 2017-05-26
        • 2014-03-07
        • 2010-10-16
        相关资源
        最近更新 更多