使用 qt 进行 SSL 握手期间出错

Error during SSL Handshake with qt

本文关键字:出错 qt 进行 SSL 使用      更新时间:2023-10-16

我今天来找你,因为我的客户端+服务器应用程序有问题。我构建了一个服务器和客户端应用程序,它们在QTcpSocket上运行良好,但是我想过添加一些安全性并使用延迟握手的QSslSocket。问题是我的客户表现得非常奇怪。情况是这样的:

  • 如果我在我的客户端中使用connectToHostEncrypted()并在将套接字放入我的传入连接插槽后立即调用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位进行编译。 我希望你能帮助我(对不起我的英语不好(,尼古拉斯。

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