Qt6.7.2中使用OpenSSL的坑

最近编写Qt Quick项目,使用Qt6.7.2版本,CMAKE编译,开始QtCreator运行代码都没有问题,访问https也正常,但打出安装包后一试,发现https访问不了,尴尬!!

查看了相关日志发现:

WARG 16:50:02.340 qt.network.ssl: No functional TLS backend was found

WARG 16:50:02.340 qt.network.ssl: No TLS backend is available

WARG 16:50:02.340 qt.network.ssl: No functional TLS backend was found

WARG 16:50:02.340 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

......

WARG 16:50:02.604 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

网上搜索,发现一大堆人都说是openssl库缺少,安装openssl对应库,然后拷贝两个文件;

libcrypto-3-x64.dll 与 libssl-3-x64.dll对运行目录下即可。具体过程网上一堆,比如用

QSslSocket::sslLibraryBuildVersionString();

查看当前QT版本支持的openssl库的版本号,用

QSslSocket::supportsSsl(); 查看系统是否支持ssl,

一开始,在win11上,qt6.7.2调用以上两个接口,返回的是:

secure channel (ntddi: 0xa00000c) 和 true,

这时你自己随意下载个openssl的版本,安装一下,比如openssl3.3.2 ,安装后再去调用,则会返回:"OpenSSL 3.0.7 1 Nov 2022" ---- true

本以后是自己用的openssl版本不一直,导致即使用了两个库libcrypto、libssl也无法访问https,无奈自己又下载opensll3.0.7的源码,编译,一堆操作。但最终,并无鸟用......

奇怪的项目是在QtCreator运行下,判断openssl的两个接口有返回:"OpenSSL 3.0.7 1 Nov 2022" ---- true,但单独点击运行程序运行却没有输出,supportsSsl()返回false;

......其实很简单,这是QT6的一个bug,

Qt 6.2.0 - beta 3 - Qt Network: qt.network.ssl: No functional TLS backend was found | Qt Forum

某些Qt库未拷贝到程序运行目录而已,哪些库呢?就是Qt安装目录下对应的tls下的三个库:

C:\Qt\6.7.2\msvc2019_64\plugins\tls

尤其是qopensslbackend.dll (只要有它就可以访问https了)

所以解决方案就是:

将tls这个目录拷贝到运行程序的目录之下即可。

201

手机版

相关推荐
Dovis(誓平步青云)几秒前
《QT学习第四篇:常见事件与UDP、TCP、文件系统、(锁、信号量、条件变量》
c语言·开发语言·汇编·qt
code monkey.2 分钟前
【Linux之旅】Linux 应用层自定义协议与序列化:从粘包问题到网络计算器
linux·网络·c++
草莓熊Lotso5 分钟前
【Linux网络】深入理解 HTTP 协议(二):从协议格式到手写工业级 HTTP 服务器
linux·运维·服务器·网络·c++·http
上海云盾第一敬业销售1 小时前
服务器遭受攻击的应对策略及快速防护实践
运维·服务器·web安全·ddos
剑神一笑6 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
Lumbrologist6 小时前
【零基础部署】Docker 部署 CrewAI 多 Agent 编排框架保姆级教程
运维·docker·容器
yyuuuzz7 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
剑神一笑7 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
雅菲奥朗7 小时前
企业级 AI 自动化|OpenClaw 龙虾实战与认证
运维·人工智能·自动化·openclaw
江华森9 小时前
Ansible 自动化运维:从入门到实战
运维·自动化·ansible