【问题标题】:SSL_CTX_set_cert_verify_callback vs. SSL_CTX_set_verifySSL_CTX_set_cert_verify_callback 与 SSL_CTX_set_verify
【发布时间】:2010-04-28 12:11:19
【问题描述】:

谁能告诉我 SSL_CTX_set_cert_verify_callback 和 SSL_CTX_set_verify 有什么区别? 来自 OpenSSL 文档:

SSL_CTX_set_cert_verify_callback() 设置 ctx 的验证回调函数。从 ctx 创建的 SSL 对象继承调用 SSL_new(3) 时有效的设置。

和:

SSL_CTX_set_verify() 将 ctx 的验证标志设置为 mode 并指定要使用的 verify_callback 函数。如果不指定回调函数,则可以使用NULL指针作为verify_callback。

所以我试图了解为每个回调发送哪个回调(从客户端)。

感谢专家。

【问题讨论】:

    标签: callback openssl ssl handshaking


    【解决方案1】:

    SSL_CTX_set_cert_verify_callback() 表示您正在指定一个函数来执行整个验证过程(遍历证书链依次验证每个证书)。 [根据下面的警告,您可能不想这样做]

    另一方面,SSL_CTX_set_verify() 指定了一个函数,该函数在默认验证器检查每个证书时调用,preverify_ok 设置为 0 或 1 以指示相关证书的验证是否有效。

    来自 SSL_CTX_set_cert_verify_callback() 的文档

    警告

    不要混用验证回调 在这个函数中描述的 期间调用的 verify_callback 函数 验证过程。后者 使用 SSL_CTX_set_verify(3) 设置 函数族。

    提供完整的验证 包括证书在内的程序 目的设置等是一个复杂的 任务。内置程序相当 功能强大,在大多数情况下应该 足以修改其行为 使用 verify_callback 函数。

    【讨论】:

    • SSL_CTX_set_verify() 仅在默认验证器发现特定证书无法验证时调用?所以只有当证书出现问题时才会调用它?
    • 看我的回答。无论验证结果如何,都会调用客户端证书。 OpenSSL 将结果传递给 preverify_ok 参数中的回调。
    • 当你说“它将被调用以获取客户端证书” - 你的意思是只从服务器端吗?
    • 是的。如果您是客户,所有这些对您来说都没有多大意义。
    • 谢谢... 更多问题: 1. 主题名称匹配验证是否由默认的 OpenSSL 程序完成? 2. 我在哪里可以获得该机制执行的检查的完整列表? 3.有没有办法专门放弃其中一个? (有效日期、信任链等)如果是 - 如何?再次感谢!
    【解决方案2】:

    SSL_CTX_set_cert_verify_callback() 更改默认证书验证功能。你可能不应该这样做。这非常复杂,您需要检查每个证书的签名,验证链,可能检查 CRL。这是 SSL 中最复杂的部分。

    SSL_CTX_set_verify() 用于设置 SSL 的模式。如果模式是 SSL_VERIFY_PEER(2 路 SSL),您还应该在此函数中设置回调以进一步验证客户端证书(检查 CN 与白名单等)。对于其他模式,不使用此 CB。既然你说你处于客户端模式,你可能不需要担心这个调用。

    【讨论】:

    • 感谢您的回复。默认验证是否检查主题名称不匹配?我有一个示例实现,它使用 SSL_CTX_set_verify() 来执行此检查。在客户端。
    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 2016-03-21
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    相关资源
    最近更新 更多