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_READ
或 SSL_ERROR_WANT_WRITE
,您需要重复调用 SSL_connect
。如果您需要重复呼叫 - 那么答案是 否 (verify_callback
将在第一次和最后一次 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
并检查问题所在(如果是 returnsSSL_ERROR_WANT_READ
或SSL_ERROR_WANT_WRITE
,您需要重复调用SSL_connect
。如果您需要重复呼叫 - 那么答案是 否 (verify_callback
将在第一次和最后一次SSL_connect
呼叫之间的某个地方被呼叫)。