C++ Qt 应用程序工作但给出警告 "qt.network.ssl: QSslSocket: cannot resolve SSLv2_server_method"

标签 c++ ssl https qt5 qt-creator

我编写了一个在 Linux mint 18.3 版上运行的 C++ Qt 应用程序(QtCreator 4.8 版,基于 Qt 5.12.0),它使用了 QNetworkAccessManager 和相关类。它基本上是一个与 Betfair 服务器通信的 Betfair HTTPS 客户端应用程序。我安装了 openSSL(版本 1.0.2g)。

基本上我的应用程序运行良好,但我在 QtCreator 的应用程序输出选项卡上得到了 qt.network.ssl: QSslSocket: cannot resolve SSLv2_server_method (两次)。我能够成功登录并与 API 交互 - 一切看起来和行为都很好!我什至使用 wireshark 来检查看起来肯定被加密的数据包。

我在这里和网上看到其他答案说 Ubuntu 发布 openSSL 时由于不稳定而禁用了 openSSLv2,并建议在启用 openSSLv2 的情况下重新编译。但由于我的应用程序实际上正在运行,我不确定这是否有必要?

基本上我的问题是这个警告对我的软件(看起来完全按预期工作)在安全方面有什么影响?我真的不想在不知道它的用途的情况下忽略警告。我只知道 SSL 工作原理的基础知识,所以我不太了解如何在此处继续操作。

编辑:一些答案让我发现警告是在从我的 key 文件创建 QSslKey 时触发的。导致它的实际代码是:

QByteArray keydata = kfile.readAll();
QSslKey pkey(keydata,QSsl::Rsa);   // Warning fires after this line executed
if(pkey.isNull()) {
    qWarning("The key has no content.");
}

最佳答案

恐怕我不能给你一个完整的答案,但我可以给你一些 Material 来调查。

在您的 Qt 安装文件夹中检查文件 qtnetwork-config.h 它包含的标志将启用/禁用代码 Qt 代码,具体取决于您在配置 Qt(使用/qtsrc/configure)或在您的系统上构建时可用的平台包。

我的 qtnetwork-config.h 文件示例:

#define QT_FEATURE_networkinterface 1
#define QT_FEATURE_bearermanagement 1
#define QT_FEATURE_ftp 1
#define QT_FEATURE_http 1
#define QT_FEATURE_localserver 1
#define QT_FEATURE_networkdiskcache 1
#define QT_FEATURE_networkproxy 1
#define QT_NO_OPENSSL true
#define QT_FEATURE_sctp -1
#define QT_NO_SCTP 
#define QT_FEATURE_socks5 1
#define QT_FEATURE_ssl -1
#define QT_NO_SSL 
#define QT_FEATURE_udpsocket 1

如果您的 ssl 包在您构建 Qt 后发生了变化(例如,您升级/降级或删除了一些......)这些设置是否仍然有效?我不确定。部署预构建 Qt 时会发生什么? ...

这可以进一步调查。 无论如何,要找出导致警告的原因,请安装消息处理程序:

// put this in main.cpp for instance
void myMessageOutput(QtMsgType type, const QMessageLogContext &/*context*/, const QString &msg)
{
    if (msg.contains("cannot resolve SSLv2_server_method"))
    {
        qDebug() << "put a breakpoint here and look in the stack trace where you are";
    }
}
// put this in int main(int argc, char ** argv) for instance
qInstallMessageHandler(myMessageOutput);

使用 Qt build in debug from source 在调试中运行您的应用程序。 您应该在消息处理程序中命中断点并查看消息的来源。

关于C++ Qt 应用程序工作但给出警告 "qt.network.ssl: QSslSocket: cannot resolve SSLv2_server_method",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169577/

相关文章:

php - https 登录表单

java - IBM WAS HTTPS 连接证书链错误

c++ - 更改构造函数的操作顺序?

c++ - 找不到 QtBluetooth header /无法将其包含在 QtCreator 中

c - openssl session 票证 - 仅使用 enc=1 调用 SSL_CTX_set_tlsext_ticket_key_cb 回调

ssl - TLS 握手失败,错误为 tls : first record does not look like a TLS handshake server=Orderer remoteaddress=192. 168.144.4:43496

Java Servlet 过滤器和 SSL

c++ - 从 fstream 读取/写入 - 需要帮助

c++ - std::map< MyClass, std::vector<MyClass>> 段错误。古怪

php - WordPress 网站签名显示 "not secured"