【发布时间】:2018-08-22 17:16:28
【问题描述】:
我将 BIO 更改为非阻塞模式
BIO_set_nbio(m_bio, 1)
让BIO_do_connect 不挂起(并使用BIO_should_retry 和select 重试重新连接)。它解决了我连接错误侦听器的问题,现在立即失败,而不是在 2 小时内超时。
但现在我有一个新问题 - SSL_get_verify_result 总是返回 X509_V_OK。不管它是过期的证书还是与服务器证书不同 - 验证总是成功的。
我不明白非阻塞模式如何以及为什么会更改证书的验证。我确认如果客户端证书不相同,则无需切换到非阻塞模式验证失败。
我尝试使用SSL_CTX_load_verify_locations 和SSL_CTX_use_certificate_file 设置客户端证书,但这似乎并不重要。
【问题讨论】:
-
非阻塞模式不会改变验证。您的代码中一定有错误,但没有实际代码是无法判断的。请创建一个minimal, complete and verifiable example,以便仔细查看您在做什么并找到问题。
-
您在第一次交换应用程序数据后进行测试吗?在某些情况下,在连接尝试之后,您仍然没有足够的来自 TLS 握手的数据来执行任何操作,并且您需要接收或发送一些应用程序数据才能自己测试(许多库提供这些东西的回调,以便它们在正确的时刻调用您的验证例程;有些根据给定的配置自行执行所有 X.509 检查)。确实需要minimal reproducible example 以及有关您的语言、TLS 库等的更多详细信息。
-
@PatrickMevzek 非常感谢,这正是我解决问题所需要的。现在我与服务器交换了一些数据,我的 ctx 有服务器证书,之后我可以与我的证书进行比较。
标签: ssl openssl ssl-certificate x509certificate