我今天来找你,因为我的客户端+服务器应用程序出了问题。我构建了一个服务器和客户端应用程序,它可以正常使用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 64bit上使用msvc2015 32位进行编译。 我希望你能帮助我(对不起我的英语不好),尼古拉斯。
答案 0 :(得分:2)
我刚刚发现了我的错误:我正在使用一个使用socket->readAll()
的readyRead插槽,这阻止了SSL握手!我还发现你需要调用startClientEncryption和startServerEncryption来进行SSL握手。