【问题标题】:Error during SSL Handshake with qt使用 qt 进行 SSL 握手期间出错
【发布时间】:2018-01-23 14:31:34
【问题描述】:

我今天来找你是因为我的客户端+服务器应用程序出现问题。我构建了一个与 QTcpSocket 一起工作的服务器和客户端应用程序,但我考虑添加一些安全性并使用 QSslSocket 延迟握手。问题是我的客户表现得很奇怪。情况如下:

  • 如果我在客户端中使用connectToHostEncrypted() 并在我的incomingConnection 插槽中获得套接字后调用startServerEncryption(),它可以正常工作。
  • 但是如果我延迟握手(通过在套接字中进行一些读/写)并稍后调用startServerEncryption(),我会在服务器端收到错误:Error during SSL handshake: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number。我也尝试在客户端使用startClientEncryption(),但我得到了同样的错误。

证书是自签名并加载并正确应用于服务器上的套接字(我通过使用 openssl s_client 测试第一种情况进行检查,服务器接受我可以测试的所有协议(SSLv3、TLSv1、TLSv1.1 , TLSv1.2)。我无法使用 SSLv2 进行测试:在客户端上,将此协议与 QSslSocket::setProtocol(QSsl::SslV2) 一起使用会显示错误 unsupported protocol 并且 openssl s_client 不会与 -ssl2 参数连接,它只会显示可用的参数。

我使用的是 Qt 5.9.1,并且我已经安装了 OpenSSL-Win32 v1.0.2L 来获取 dll。我还在 Windows 7 64 位上使用 msvc2015 32 位进行编译。 我希望你能帮助我(抱歉我的英语不好),尼古拉斯。

【问题讨论】:

    标签: c++ qt sockets ssl qt5


    【解决方案1】:

    我刚刚发现了我的错误:我使用了一个使用 socket->readAll() 的 readyRead 插槽,它阻止了 SSL 握手!我还发现您需要同时调用 startClientEncryption 和 startServerEncryption 来进行 SSL 握手。

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 2018-08-04
      • 2022-12-05
      • 2014-03-05
      • 1970-01-01
      • 2020-11-02
      • 2014-05-22
      • 1970-01-01
      • 2016-12-24
      相关资源
      最近更新 更多