【问题标题】:In non-blocking mode openssl allows to use any certificate on client side在非阻塞模式下,openssl 允许在客户端使用任何证书
【发布时间】:2018-08-22 17:16:28
【问题描述】:

我将 BIO 更改为非阻塞模式

BIO_set_nbio(m_bio, 1)

BIO_do_connect 不挂起(并使用BIO_should_retryselect 重试重新连接)。它解决了我连接错误侦听器的问题,现在立即失败,而不是在 2 小时内超时。

但现在我有一个新问题 - SSL_get_verify_result 总是返回 X509_V_OK。不管它是过期的证书还是与服务器证书不同 - 验证总是成功的。

我不明白非阻塞模式如何以及为什么会更改证书的验证。我确认如果客户端证书不相同,则无需切换到非阻塞模式验证失败。

我尝试使用SSL_CTX_load_verify_locationsSSL_CTX_use_certificate_file 设置客户端证书,但这似乎并不重要。

【问题讨论】:

  • 非阻塞模式不会改变验证。您的代码中一定有错误,但没有实际代码是无法判断的。请创建一个minimal, complete and verifiable example,以便仔细查看您在做什么并找到问题。
  • 您在第一次交换应用程序数据后进行测试吗?在某些情况下,在连接尝试之后,您仍然没有足够的来自 TLS 握手的数据来执行任何操作,并且您需要接收或发送一些应用程序数据才能自己测试(许多库​​提供这些东西的回调,以便它们在正确的时刻调用您的验证例程;有些根据给定的配置自行执行所有 X.509 检查)。确实需要minimal reproducible example 以及有关您的语言、TLS 库等的更多详细信息。
  • @PatrickMevzek 非常感谢,这正是我解决问题所需要的。现在我与服务器交换了一些数据,我的 ctx 有服务器证书,之后我可以与我的证书进行比较。

标签: ssl openssl ssl-certificate x509certificate


【解决方案1】:

正如帕特里克指出的那样,我遇到的问题是由于非阻塞模式下的 SSL 上下文没有服务器证书,因此在建立连接后立即进行验证总是成功的。为了解决这个问题,我在第一次读写数据交换后添加了证书验证(如果它与我期望看到的相同)。

SSL_CTX_new(SSLv23_client_method());
SSL_CTX_load_verify_locations(ctx, certFilePath, NULL);
BIO_new_ssl_connect(ctx);
BIO_get_ssl(bio, &ssl);
BIO_set_conn_hostname(bio, hostname);
BIO_set_nbio(bio, 1);
auto err = BIO_do_connect(bio);
// check err and BIO_should_retry to retry as needed

// Problem I had was here - the call always returns X509_V_OK
// in non-blocking mode regardless of what cert I use on 
// my (client) side.
// In IO blocking mode (without BIO_set_nbio call above) validation
// fails as expected for mismatching certs.
SSL_get_verify_result(ssl);

// Exchange some data with server with
// BIO_read/BIO_write

// And now we have server cert in ctx
auto clientCert = SSL_get_certificate(ssl);
auto serverCert = SSL_get_peer_certificate(ssl);
auto certsAreTheSame = X509_cmp(clientCert, serverCert) == 0;

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 2014-11-26
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2017-04-18
    相关资源
    最近更新 更多