【问题标题】:SSL handshake problems with Qt 5.9 only when deployed in client仅在客户端中部署时 Qt 5.9 的 SSL 握手问题
【发布时间】:2017-11-29 15:36:09
【问题描述】:

我有一个使用 Windows 中的 MinGw 在 Qt 5.9 中构建的桌面应用程序,它从数据库中提取数据并以有组织的方式将其显示在 GUI 中。

在发布配置中部署项目在我测试的 4 台不同的计算机上运行良好(Windows 10 和 Windows 7)

但是,在我的客户端计算机中,每当尝试连接时都会出现 SSL 握手错误。

发生的错误是:

qml: Error during SSL handshake: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

我在这里找到并尝试过的当前解决方案:

  • 在我的发布文件夹中部署 openssl 最新的 dll(与 qt 的 dll 一起)

  • 实现ignoreSslErros(),如下代码:

    QObject::connect(_socket, SIGNAL(sslErrors(QList<QSslError>)), _socket,SLOT(ignoreSslErrors()));
    

使用的信号和槽在 QWebSocket 的文档中定义。

插槽:http://doc.qt.io/qt-5/qwebsocket.html#ignoreSslErrors

信号:http://doc.qt.io/qt-5/qwebsocket.html#sslErrors

这个实现不起作用。

我已经到了远程访问我客户的计算机并在调试配置中运行 Qt 的地步,我得到的唯一一件事是这些在我的计算机上构建时不会出现的构建警告:

qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_client_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_1_server_method
qt.network.ssl: QSslSocket: cannot resolve TLSv1_2_server_method
qt.network.ssl: QSslSocket: cannot resolve SSL_select_next_proto
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
qt.network.ssl: QSslSocket: cannot resolve SSL_set_alpn_protos
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_alpn_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_alpn_selected

【问题讨论】:

    标签: c++ windows qt ssl


    【解决方案1】:

    鉴于警告,我建议客户端计算机上的 OpenSSL 库不支持 TLS 1.1+,但服务器需要它。虽然您可能已尝试提供新的 SSL 库,但这些消息表明您的程序未使用这些新库。

    【讨论】:

    • 这帮助我解决了问题,我将服务器 TLS 要求降级为 1.0。我们使用 Caddy (caddyserver.com),我不得不更改 caddyfile。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多