解决 Qt 项目中的 HTTPS 请求错误:TLS 初始化失败(TLS initialization failed)

在使用 Qt 的网络模块时,通常情况下通过 HTTP 请求都不会有问题。但是,当需要通过 HTTPS 进行加密传输时,就必须使用 OpenSSL 库。这是因为 HTTPS 需要通过 SSL/TLS 进行加密,如果系统中缺少相应的库,就会导致出现类似"qt.network.ssl:QSslSocket::connectToHostEncrypted: TLS initialization failed" 的错误。

如果在新的设备上编译原来的项目,很大概率出现这个问题,因为这时候qt没有配置相应的open ssl .dll文件(windows系统)。

在 Linux 或 macOS 环境下,系统通常会默认包含 OpenSSL 或类似的加密库,因此在这些平台上配置 SSL/TLS 支持会更加简便。Windows 系统则通常需要手动安装并配置 OpenSSL 才能确保 Qt 项目中的 HTTPS 请求正常工作。

本文的解决方案仅适用于 Windows 系统。

步骤一:下载 OpenSSL

首先,你需要下载 OpenSSL。可以通过以下链接访问下载页面:

OpenSSL 下载页面

进入页面后,你会看到左侧栏中列出了不同的 OpenSSL 版本。你需要根据自己的系统选择合适的版本和格式进行下载。不要盲目选择高版本,一定要根据你的 Qt 版本来选择对应的 OpenSSL 版本。

如何确定你需要的 OpenSSL 版本?
你可以在 Qt 项目中使用 QSslSocket::sslLibraryBuildVersionString() 函数,输出当前 Qt 支持的 OpenSSL 版本。例如,输出结果可能是 OpenSSL 1.1.1,这说明你需要下载对应版本的 OpenSSL。然后,根据你系统的位数(32位或64位)来选择相应的安装包。

如果你喜欢动手,也可以选择下载 OpenSSL 源码自行编译,但相较之下,直接下载并安装已经编译好的版本显然更加方便。

当正确配置了之后,在 Qt 项目中使用QSslSocket::supportsSsl();结果为true。

步骤二:拷贝库文件

安装完成 OpenSSL 后,进入安装路径下的 bin 目录,找到两个库文件,并将它们拷贝到你的应用程序执行路径下。例如,拷贝到 Qt 编译路径(例如 msvc2017/bin/)。这样,所有使用该编译器的 Qt 工程都可以支持 SSL/TLS 功能。

库文件名称可能根据版本有所不同,常见的两个文件为:

  • libcrypto-1_1.dll
  • libssl-1_1.dll

如果是64位的则为:

步骤三:重新编译并测试

完成库文件的拷贝后,重新编译你的 Qt 项目,并运行程序。此时,HTTPS 请求应该可以正常工作了。如果问题依然存在,可以尝试使用调试工具跟踪并检查具体的错误信息。

总结

配置 Qt 项目中的 HTTPS 支持并不是特别复杂,但确实需要注意版本匹配问题。通过正确安装 OpenSSL 库并将其拷贝到应用程序的执行路径中,你就可以顺利解决 "TLS initialization failed" 的问题。希望本篇文章能够帮你顺利解决这个问题,避免走不必要的弯路。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值