首页 > 解决方案 > 在 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 库?

标签: windowsqtopensslqt5mingw

解决方案


我们拥有的 Qt 预编译版本是针对更新版本的 OpenSSL 构建的,而不是 Qt 安装程序本身作为 DLL 提供的版本。虽然这在我的机器上没问题,但在干净的 Windows 10 上部署时,它无法加载并且应用程序报告 TLS 错误。相反,我得到了一个更新的 OpenSSL 库集,这似乎有效。

为了验证这一点,由于我无法访问客户端的机器,我使用 Hyper-V 和 Microsoft 自己提供的 Windows 10 Professional 映像运行了一个 VM。我在那里看到了问题,一旦我用更新的 DLL 覆盖了 libcrypto 和 libssl DLL,该应用程序就可以正常工作了。


推荐阅读