OpenSSL verify_callback和SSL_connect

时间:2015-10-30 13:36:15

标签: c++ linux openssl

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

文档中的摘录
  

verify_callback的返回值控制着策略   进一步验证过程。如果verify_callback返回0,则   “验证失败”立即停止验证过程   州。如果设置了SSL_VERIFY_PEER,则会发送验证失败警报   到对等方并终止TLS / SSL握手。如果   verify_callback返回1,继续验证过程。如果   verify_callback总是返回1,TLS / SSL握手不会   关于验证失败和连接终止   将成立。

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

在我看来,这是一个安全的假设,因为文档声明此回调是决定是否建立连接的决定因素。因此,回调将直接影响SSL_connect()调用的返回值。任何人都可以确认/否认这个假设吗?

1 个答案:

答案 0 :(得分:2)

假设您只对TCP连接感兴趣:简答:,长答案:取决于

  • 如果您连接 阻止模式 - 始终
  • 如果您以 非阻止模式连接 - SSL_connect可能会在建立连接的过程中返回-1。在这种情况下,您应该致电SSL_get_error并检查问题所在(如果它返回SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE您需要重复SSL_connect来电。如果您需要重复通话 - 则答案为verify_callback将在第一次和最后一次SSL_connect通话之间调用。