关于QT网络库发送https请求遇到TLS initialization failed错误的解决方法

我使用QT网络库向google发送https请求结果失败,错误信息为:”TLS initialization failed“,其实是缺少openssl的支持,网上也提供了几种解决方法但并不是对每个人都适用(Qt版本差异),现在把解决方法列下来。

方法一:

将(QT安装目录)目录:C:\Qt\Qt5.12.9\Tools\mingw730_64\opt\bin下的ssleay32.dll和libeay32.dll拷贝到exe根目录,但是这个方法在我这个QT版本行不通,Qt5.6.0以下版本应该没问题,因为跟QT版本有很大关系,我的项目需要SSL版本是1.1.1d(实际用的1.1.1g也可以)
这里提供查看支持SSL版本方法

qDebug()<<QSslSocket::supportsSsl();//是否支持ssl
qDebug()<<QSslSocket::sslLibraryBuildVersionString();//依赖的ssl版本

另外openssl在1.0.x之前的版本中,文件为libeay32.dll和ssleay32.dll,在1.1.x之后的版本中,名字是libssl.dll和libcrypto.dll

方法二:

自己编译openssl,这个编译起来有点麻烦,反正我没试过这个方法,我在这里提供两个链接,都是已经编译好的openssl库,自己下载就行
1.openssl1.0(包含1.0)以下版本
https://indy.fulgan.com/SSL/Archive/?cf_chl_captcha_tk=f48b53e6036b1bfefa38e3cf0e719186cb791f4a-1595743357-0-AcQfIICI6BvFduJE2EdS7wJHOBduGMyL_iFya2jUe9Ot4Bmlbmj6xzZxE-U3PVVmYR2y03ATuNHT0o-IVpnr-y9KWcCWtnMpw56-3UBRJWtkk_QZIw9EY05OQHUV__mVN-wZeaCKB37GWbURnq14ct69toocdlLSwnHAxaGc-4N8BLKNBIhHfqxeGLRq90wHsIFjfsFyRlsnTP2PGEtAlamkji9czf1-vCv9RoKgmkvAd1JdnWBnD8AeqtNoDPg7vfn3IA3SZVGFRqawjDwpyXNWPWJuOvydTKWRfZvSvZe07ry7guHTKgVN4zYO0JqpL5MSoqtaivsCwFvS_s1BATKWOY1z_gLb52eOl-MA2uqz8s1-pq6C1iNG_OYQv8O0Vv2TsnDdmIqBV6lPOoGP8CqZa1vsLAW1VrH_J6C6yo_EeqmR1fI5kGx_8uJYewb7jyxl_uhSXXECCgN1-6-mzw0N0yPKXDVLDI2vQmJ5Xhz4kBzkelY19GS4STHy9WuR7Q
2.openssl1.1版本
https://bintray.com/vszakats/generic/openssl

方法三

(我用的这个解决了)
进入这个网站:https://slproweb.com/products/Win32OpenSSL.html
如图:
关于QT网络库发送https请求遇到TLS initialization failed错误的解决方法_第1张图片
我需要的是1.1.1d版本,但这里只有1.1.1g,因此我下载这个的exe进行安装。安装后在QT项目的.pro文件中加入:

INCLUDEPATH += C:/OpenSSL-Win32/include

这样就可以了,可以测试一下。
打包的时候需要将(1.0以下版本是ssleay32.dll和libeay32.dll)(1.1版本对应的是libcrypto和libssl 的dll文件)从c:\ Program Files \ OpenSSL \复制到exe根目录

另外给大家一个国外的网站进行参考,是讨论关于这方面的
https://forum.qt.io/topic/95700/qsslsocket-tls-initialization-failed/31

你可能感兴趣的:(TLS,initialization,failed)