1.问题

在使用QNetworkAccessManager 访问 https 时,可能会出现下面的错误

QSslSocket::connectToHostEncrypted: TLS initialization failed

2.解决办法

2.1.确定所需的ssl库版本

先确定当前Qt版本使用的是那个版本的ssl,在你的程序中加这一句。并运行

  qDebug() << "ssl" << QSslSocket::sslLibraryBuildVersionString() << QSslSocket::supportsSsl();

假如得到的输出为

ssl "OpenSSL 1.1.1g  21 Apr 2020" true

那么,我们就该下载1.1.1版本的ssl库了。

2.2.下载所需的ssl库版本

【The Win32/Win64 OpenSSL Installation】这里下载对应的版本安装 (假如没有你需要的版本,请看第3节)。 然后拷贝库文件(但是我直接安装完就可以了,安装时勾选复制到系统目录)。
需要注意的是,假如安装时勾选复制到系统目录,是对本地所有程序生效。
假如想方便管理或者只对当前的项目生效,则需要把这两个文件拷贝到编译出来的exe同级文件夹下,如下图所示:
在这里插入图片描述在我们把程序发布给客户时,也要把这两个库放到exe文件夹中一起给客户。

3.下载指定版本ssl库文件

假如你打开这个【The Win32/Win64 OpenSSL Installation】,大概率是找不到1.1.1的下载链接,现在上面显示的都是最新版的了。
在这里插入图片描述假如想下载之前的版本,也是有办法的。还是这个网页,点这里。
在这里插入图片描述然后再点这里
在这里插入图片描述在这里面搜一下,就可以找到你所需要的版本了
在这里插入图片描述

        "Win64OpenSSL_Light-1_1_1w.msi": {
            "basever": "1.1.1",
            "subver": "w",
            "arch": "INTEL",
            "bits": 64,
            "light": true,
            "installer": "msi",
            "url": "https://slproweb.com/download/Win64OpenSSL_Light-1_1_1w.msi",
            "size": 3952640,
            "md5": "a75000b3334fa2f992efa57187945290",
            "sha1": "8181019f2742795858d89566007e62705851a493",
            "sha256": "62002f95fcaf5b68dcb4dd950b352f06962634794aa42c9be4b581ec0b78f763",
            "sha512": "89697af24af98247dc58698c5b23711c9e7a133eb984a5292b88db318998d62946286b859e299614aefc98857a45f5f24cfcfb67ce10c959ff06a6eb7c478cdc"
        }

参考:
【QSslSocket::supportsSsl()返回false问题解决】

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐