10

谁能告诉我 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。

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

谢谢专家。

4

2 回答 2

10

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 函数修改其行为就足够了。

于 2010-04-28T12:27:14.593 回答
3

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

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

于 2010-04-28T12:43:22.767 回答