首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用SSL时发生QSslSocket错误

不使用SSL时发生QSslSocket错误
EN

Stack Overflow用户
提问于 2014-10-14 12:44:20
回答 4查看 25.6K关注 0票数 11

在我的两个使用QNetworkRequest通过QNeworkRequest从外部加载数据的Qt应用程序中,我注意到了这个输出:

代码语言:javascript
复制
QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
QSslSocket: cannot resolve SSL_select_next_proto
QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
QSslSocket: cannot resolve SSL_get0_next_proto_negotiated

导致出现这些警告的请求的一个例子是

代码语言:javascript
复制
QNetworkReply reply = m_nam->get(QNetworkRequest(QUrl("http://api.openweathermap.org/data/2.5/forecast?id=2835297&mode=xml")));

我相当肯定,在任何查询中都不涉及TLS/SSL,它们都是纯HTTP的。消息总是在发出第一个请求之后出现,而不考虑URL。--我根本不打算使用SSL,代码中没有提到SSL,这意味着我不能在编程上忽略这些警告。

我的设置是Windows764位,MSVC2013和MinGW,QT5.3.2。无论使用哪个编译器,消息都会出现。没有安装OpenSSL或其他SSL开发库。

问题是:如何消除这些警告?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-14 21:17:30

这些只是解析qWarning()函数时的OpenSSL ()调用。它并不是试图调用这些函数,仅仅是解决它们。调用未解析的函数将导致QSslSocket: cannot call unresolved function ...警告。

警告是OpenSSL函数在运行时通过调用QNetworkAccessManager::supportedSchemesImplementation()中的QSslSocket::supportsSsl()静态来解析的结果,该调用返回支持的模式-- http,如果SSL支持https的话。

你对这些警告几乎没有选择,

  1. 忽略它们,因为您不需要或不需要SSL。
  2. 用传递给-no-opensslconfigure重新编译Qt
  3. 提供OpenSSL,以便解析函数并使https变得可用--可能不是您想要的
票数 18
EN

Stack Overflow用户

发布于 2016-10-01 03:14:59

可以使用QLoggingCategory::setFilterRules("qt.network.ssl.w arning=false");禁用相关的警告消息。

票数 5
EN

Stack Overflow用户

发布于 2015-07-07 18:55:08

我们偶尔会有客户收到非常类似的警告信息,但软件也在崩溃。

代码语言:javascript
复制
QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
QSslSocket: cannot resolve SSL_select_next_proto
QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
QMutex: destroying locked mutex

我们确定这是因为,尽管我们也没有使用SSL,但程序在客户的计算机上找到了OpenSSL的副本,并尝试与它进行接口。但是,它发现的版本太旧了(需要由Qt 5.2起 v1.0.0或更高版本)。

我们的解决方案是分发OpenSSL DLL和应用程序(~1.65MB)。另一种方法是从零开始编译Qt,而不支持OpenSSL。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26361145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档