11

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

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

导致出现这些警告的请求示例之一是

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,这意味着我不能以编程方式忽略警告。

我的设置是 Windows 7 64 位、MSVC2013 和 MinGW、Qt 5.3.2。无论使用何种编译器,都会显示这些消息。没有安装 OpenSSL 或其他 SSL 开发库。

问题是:我如何摆脱这些警告?

4

4 回答 4

18

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

警告是 OpenSSL 函数在运行时通过调用QSslSocket::supportsSsl()static in解析的结果QNetworkAccessManager::supportedSchemesImplementation(),返回支持的模式 ---http并且,如果 SSL 支持https

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

  1. 忽略它们,因为您不想要或不需要 SSL
  2. 重新编译 Qt 并-no-openssl传递给configure
  3. 提供OpenSSL,以便功能得到解决并https变得可用 - 可能不是您想要的
于 2014-10-14T21:17:30.883 回答
5

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

于 2016-10-01T03:14:59.960 回答
4

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

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.65 MB)。另一种方法是在没有 OpenSSL 支持的情况下从头开始编译 Qt。

于 2015-07-07T18:55:08.340 回答
1

你试过QSslSocket::ignoreSslErrors吗?

于 2014-10-14T12:50:00.393 回答