windows - 在 Windows 的 Qt 项目中使用 OpenSSL v1.1.1
问题描述
我的 Windows 程序使用 OpenSSL 库通过 HTTPS 接收 JSON 数据。
在 Qt 版本 5.12.3 中,使用了 OpenSSL 1.0.2 库,并且一切都变得简单而简单。我只是将“c:\ Qt \ Qt5.12.3 \ Tools \ mingw730_64 \ opt \ bin \”(ssleay32.dll,libeay32.dll)中的文件放入我的程序可执行文件的文件夹中,一切正常(用于编译我使用MinGW)。
现在 Qt 5.14.1 出现了 OpenSSL 1.1.1d,我不明白如何将它连接到我的程序,以便 QNetworkAccessManager 终于开始工作。库“ssleay32.dll”、“libeay32.dll”1.1.1d 版根本不存在。我试图将 libcrypto-1_1.dll 和 libssl-1_1.dll 库(来自 c: \ Qt \ Qt5.14.1 \ Tools \ QtCreator \ bin )放到我的 exe 中,但它没有帮助。
是的,它们是 32 位的,但我也尝试将我的项目编译为 x32。
编码
qDebug () << QSslSocket :: supportsSsl () << QSslSocket :: sslLibraryBuildVersionString () << QSslSocket :: sslLibraryVersionString ();
返回
false "OpenSSL 1.1.1d 10 Sep 2019" ""
所以.. 对于 Windows 10,是否可以将 Qt 项目连接到 OpenSSL v1.1.1d - 无需重新编译Qt 且无需编译OpenSSL 库?
解决方案
我们拥有的 Qt 预编译版本是针对更新版本的 OpenSSL 构建的,而不是 Qt 安装程序本身作为 DLL 提供的版本。虽然这在我的机器上没问题,但在干净的 Windows 10 上部署时,它无法加载并且应用程序报告 TLS 错误。相反,我得到了一个更新的 OpenSSL 库集,这似乎有效。
为了验证这一点,由于我无法访问客户端的机器,我使用 Hyper-V 和 Microsoft 自己提供的 Windows 10 Professional 映像运行了一个 VM。我在那里看到了问题,一旦我用更新的 DLL 覆盖了 libcrypto 和 libssl DLL,该应用程序就可以正常工作了。
- 预编译的 OpenSSL 库:https ://slproweb.com/products/Win32OpenSSL.html
- 导致我发现这一发现的关键讨论:https ://stackoverflow.com/a/63821544/273934
推荐阅读
- c# - 无法使用 Websocket 连接客户端-服务器
- django - 如何在 django rest 框架中解析序列化器数据
- ruby - 在厨师的 ruby_block 中更改权限时如何执行“除非”条件?
- ios - 嵌入 PageViewController 时的 CollectionView 拖放
- ios - UIDocumentPickerViewController 在使用 directoryURL 时缺少取消按钮以关闭
- postgresql - 我们可以创建 PostgreSQL 表空间来指向数据文件夹之外的不同驱动器吗
- c++ - 警告:“枚举 sf::Keyboard::Key”和“枚举 sf::Mouse::Button”之间的比较 [-Wenum-compare]|
- go - 使用 viper 从 envfile 读取配置
- macos - 如何使用 quik look 在 finder 中打开选定的文件
- c# - 如何从 C# 中的另一个方法调用变量?