【发布时间】: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 位进行编译。 我希望你能帮助我(抱歉我的英语不好),尼古拉斯。
【问题讨论】: