gpt4 book ai didi

c++ - 使用 qt 进行 SSL 握手时出错

转载 作者:行者123 更新时间:2023-11-28 01:44:32 24 4
gpt4 key购买 nike

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

  • 如果我在我的客户端中使用 connectToHostEncrypted() 并在我的 incomingConnection 插槽中获得套接字后立即调用 startServerEncryption() 它工作正常。
  • 但是如果我延迟握手(通过在套接字中进行一些读/写)并稍后调用 startServerEncryption(),我会得到错误:SSL 握手期间出错:错误:1408F10B :SSL 例程:SSL3_GET_RECORD:服务器端版本号错误。我也尝试在客户端使用 startClientEncryption() 但我得到了同样的错误。

证书是自签名的,加载并正确应用于服务器上的套接字(我通过使用 openssl s_client 测试第一种情况进行检查,服务器接受我可以测试的所有协议(protocol)(SSLv3、TLSv1、TLSv1.1 ,TLSv1.2)。我无法使用 SSLv2 进行测试:在客户端上,使用此协议(protocol)与 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 位进行编译。Nicolas,我希望你能帮助我(抱歉我的英语不好)。

最佳答案

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

关于c++ - 使用 qt 进行 SSL 握手时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45696762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com