OpenSSL verify_callback 和 SSL_connect

OpenSSL verify_callback and SSL_connect

SSL_CTX_set_verify()SSL_set_verify() 调用可用于分别为基础上下文和 ssl 设置 verify_callback() 函数。这是 verify_callback():

文档中的一个片段

The return value of verify_callback controls the strategy of the further verification process. If verify_callback returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated. If verify_callback returns 1, the verification process is continued. If verify_callback always returns 1, the TLS/SSL handshake will not be terminated with respect to verification failures and the connection will be established.

现在回答我的问题。如果我设置 verify_callback()(以及任何其他必要的 OpenSSL 设置调用、证书等),然后调用 SSL_connect(),是否可以安全地假设对 verify_callback() 的任何调用都用于建立连接return 在 SSL_connect() 调用的 return 之前的目的是什么?

在我看来,这是一个安全的假设,因为文档指出此回调决定是否建立连接。因此,回调将直接影响SSL_connect()调用的return值。谁能confirm/deny这个假设?

假设您只对 TCP 连接感兴趣:简短回答:,详细回答:视情况而定:

  • 如果您以阻塞模式连接 - 总是
  • 如果您以 非阻塞模式连接 - SSL_connect 可能会 return -1建立连接。在这种情况下,您应该调用 SSL_get_error 并检查问题所在(如果是 returns SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE,您需要重复调​​用 SSL_connect。如果您需要重复呼叫 - 那么答案是 verify_callback 将在第一次和最后一次 SSL_connect 呼叫之间的某个地方被呼叫)。