解决:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

         最近使用https给服务器发送请求的时候发现出现了“qt.network.ssl:QSslSocket::connectToHostEncrypted: TLS initialization failed”错误,搞了好久,也算是吃一堑长一智。

使用Qt的network模块的时候,正常情况下没问题,但是如果要使用https的时候,就会用到openssl库,需要使用SSL/TLS加密方式,如果缺少对应的库就会报“qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed”错误。

PS:本文解决方案只适用Windows系统

第一步:下载openssl

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

进入下载页面后大概是这样的:解决:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed_第1张图片

左边那一列就可以直接选择你需要的openssl版本和系统位数以及下载包的格式

不要盲目选择高版本!!!

先在你的Qt里使用QSslSocket::sslLibraryBuildVersionString();输出你的Qt支持的openssl版本,输出的内容如下:,那个1.1.1就是你的Qt使用的openssl的版本,在下载页面找到对应的版本,选择你的应用程序的对应位数下载、安装。

当然了,网上也有直接下载openssl源码然后自己编译的那种,但是我更喜欢直接安装使用的,更方便。

第二步:拷库

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

解决:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed_第2张图片

这个库的名字根据版本不同也是不一样的(我安装的是1.1.1版本的),如果是旧版本的1.0的库大概率叫这俩:

如果你要提问:高版本Qt使用低版本openssl库可不可行?

答:不可以,因为我使用1.0的库依然用不了SSL/TLS,所以还是老老实实根据自己Qt支持的openssl版本来拷贝对应的库

至此,重新编译你的Qt应用程序,运行,调试,问题解决!!!

你可能感兴趣的:(Qt应用程序相关,qt,ssl,网络,https)