问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Qt开发中TLS初始化失败问题的解决方案

创作时间:
作者:
@小白创作中心

Qt开发中TLS初始化失败问题的解决方案

引用
1
来源
1.
https://www.cnblogs.com/zhuchunlin/p/18431631

在使用Qt进行HTTPS请求开发时,经常会遇到"TLS initialization failed"的错误。本文将详细介绍这个问题的原因,并提供一个适用于Windows系统的解决方案,帮助开发者快速解决这一困扰。

问题描述

最近在使用HTTPS给服务器发送请求时,遇到了"qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed"错误。经过一番排查,发现是由于缺少openssl库支持导致的。

原因分析

使用Qt的network模块时,如果需要使用HTTPS,就会用到openssl库,需要使用SSL/TLS加密方式。如果缺少对应的库,就会报"qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed"错误。

解决方案

第一步:下载openssl

下载链接:https://slproweb.com/products/Win32OpenSSL.html

进入下载页面后,不要盲目选择高版本!Qt本身是支持ssl的,但是因为法律原因?没有自带对应的dll。

我们先使用这段代码打印当前Qt支持的ssl版本:

#include <QSslSocket>
#include <QDebug>
qDebug()<< QSslSocket::sslLibraryBuildVersionString();

使用网络需要加上Qt的网络模块,在pro文件里加上:

QT += network

我这里输出的是1.1.1,这就是你的Qt使用的openssl的版本,在下载页面找到对应的版本,选择你的应用程序的对应位数下载、安装。

第二步:安装openssl

安装的时候,我选择的是第二个,这样可以方便的进行dll文件的拷贝。

第三步:拷贝库文件

安装完成后在openssl的路径下找到bin目录,拷贝这两个库到你的应用程序执行路径下(或者拷贝到Qt的对应编译路径下,例如msvc2017/bin/,这样之后你所有的Qt类似工程都可以使用SSL/TLS,但是编译打包的时候记得带着这俩库):

拷贝libcrypto-1_1-x64.dlllibssl-1_1-x64.dll文件到工程的exe程序所在路径下。

拷贝完后重新运行程序,至此就可以成功解决"TLS initialization failed"的问题了。

参考资料

下载openssl项目源码:https://blog.51cto.com/fish/5935049

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号