如何在QT windows应用程序中启用SSL

how can I enable SSL in QT windows application?

本文关键字:启用 SSL 应用程序 windows QT      更新时间:2023-10-16

Qt要求在系统上安装开放的ssl库。在debian/ubuntu中,当我使用apt安装openssl时,一切都正常。但是当我在windows中编译我的应用程序时,SSL功能不可用,我可以通过执行来验证这一点

QSslSocket::supportsSsl()

我如何使它在窗口中工作?我从下载并安装了开放sslhttp://www.slproweb.com/products/Win32OpenSSL.html但它仍然返回false。

所以过了很长时间,我发现问题是什么:

这两个库需要和你的可执行文件在同一个文件夹中,或者在windows系统文件夹中(我认为是system32):

libeay32.dll
ssleay32.dll

你会在OpenSSL文件夹的\bin中找到它们,因为我在那里复制了这两个库,所以它可以

重要信息:在部署到客户端计算机时,还需要安装用于编译这些.dll的vcredist包,该包可能与运行应用程序本身所需的vcredst包不同。vcredist的版本取决于库的版本。

您必须在项目中添加OpenSSL库。在windows中,Qt没有OpenSSL库。(我认为这是一个法律问题)。您可以在发布的URI中找到OpenSSL开发人员库。如果您使用32位框架进行编译,则需要下载Win32 OpenSSL v1.0.1e

这就是我项目中的内容。

QT += core gui network
win32{
    LIBS += -LC:/OpenSSL-Win32/lib -lubsec
    INCLUDEPATH += C:/OpenSSL-Win32/include
}

正如您已经发现的,您缺少dll。以下是更多信息

使用检查您需要的ssl版本

QSslSocket::sslLibraryBuildVersionString();

对于ssl 1.0.x(qt<5.12.4),您可能缺少libeay32.dll和ssleay32.dll.

对于ssl 1.1.x(qt>=5.12.4),二进制兼容性已中断(qt 5.12.4已发布),因此您可能需要libssl-1_1.dll和libcrypto-1_1.dll及其依赖项capi.dll和dasync.dll。