使用 qt 进行 SSL 握手期间出错
Error during SSL Handshake with qt
我今天来找你,因为我的客户端+服务器应用程序有问题。我构建了一个服务器和客户端应用程序,它们在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握手。
相关文章:
- 从 ParaView 构建自定义 Qt 应用程序示例时出错
- 使用 qt 进行 SSL 握手期间出错
- 从 Qt(release) 生成的文件执行.EXE文件时出错
- 在 Qt 中将 x 可执行文件作为按钮事件运行时出错
- 交叉编译 qt:加载共享库时出错
- 打开终端时出错:MacOs 10.12.4 上的 Qt Creator 未知
- 使用 PostgreSQL 编译静态 Qt 5.10.0 时出错
- 尝试从 Github 编译 OpenCV QT 代码时出错
- 使用 Qt (Ubuntu 14.04) 编译 qt-dab 时出错
- 使用由 Mingw 5.3 编译的 boost ASIO 库使用 QT 时出错
- 使用 Qt 创建器时出错:"multiple definition" "first defined here"
- 尝试使用共享库部署QT应用程序时出错
- 将 TagLib 链接到 Qt 时出错
- 为什么我在使用 Qt creator 用 C 编译代码时出错,但可以使用 make 文件轻松做到这一点
- 在 Qt 中使用 for 与 OpenCV3 时出错
- 使用 Qt 标头的递归包含时出错
- std::stoul 在带有 NDK r13b 的 Android 版 Qt 应用程序上出错
- LNK1104将Boost库添加到Qt项目时出错
- 尝试在Qt中运行应用程序时出错
- 仅在从命令行构建Qt项目时出错