Qt Android/Windows/Linux 添加SSL认证【error TLS initialization、qt.network.ssl: QSslSocket: OpenSSL >= 1.】

0 问题

  • 1,发现的问题:
    在桌面端测试,发现可以正常post请求,但是在Android端运行时,就发现post请求发出去,也收不到信息。由于在真机上进行测试,不能打QDebug调试信息,于是只能把错误直接打印在控件上。

  • 2,打印出错信息的方法:
    事件:

QNetworkAccessManager* networkAccessManager;
    connect(networkAccessManager, &QNetworkAccessManager::finished,
            this, &MainWindow::replyFinisheded);

接受post请求的槽函数

void MainWindow::replyFinisheded(QNetworkReply *reply){
	ui->label_3->setText("reply error:" + reply->errorString());
}
  • 3, 曝出的异常
error TLS initialization
  • 4,测试是否有用的openSSL版本
qDebug() << QSslSocket::supportsSsl()//是否支持,不支持就说明没有openSSL
         << QSslSocket::sslLibraryBuildVersionString()//运行时需要的版本
         << QSslSocket::sslLibraryVersionString();//可用的版本

1 解决方法

  • 1,下载安装Android的openSSL
    地址
    然后自己导入,也可以选择Download OpenSSL的按钮,自动下载导入。
    安装成功的话,选择全部选项打勾。(如果是windwos的也可以下载windwos版本的
    openssl官网)
    在这里插入图片描述

  • 2,打开Qt的项目中,选择Include prebulid openSSL libraries的选项,
    在这里插入图片描述
    在.pro文件中会自动生成下面代码,也可以手动自己在pro文件中添加代码

android: include(/Users/mac/android-sdk/android_openssl/openssl.pri)

ANDROID_EXTRA_LIBS = /Users/mac/android-sdk/android_openssl/latest/arm/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/arm/libssl_1_1.so /Users/mac/android-sdk/android_openssl/latest/arm64/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/arm64/libssl_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86/libssl_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86_64/libcrypto_1_1.so /Users/mac/android-sdk/android_openssl/latest/x86_64/libssl_1_1.so

按下ctr/Command + B后进行编译,会自动生成下面的代码
在这里插入图片描述
然后就可以愉快的进行https的请求了。

2 小知识

因为openSSL为开源的加密软件,有些地方涉及这方面需要得到批准,因此Qt并不会自动帮我们链接openSSL程序。

Import and Export Restrictions
Qt binary installers include the OpenSSL 
libraries used by QtNetwork. 
However, those are not automatically deployed with 
applications that are built with Qt. 
Import and export restrictions apply for 
some types of software, and for some parts of the world. 
Developers wishing to use SSL communication in their deployed
 applications should either ensure that their users have the 
 appropriate libraries installed, or they should consult a s
 uitably qualified legal professional to ensure that 
 applications using code from the OpenSSL project are correctly 
 certified for import and export in relevant regions of the world.

参考:https://blog.csdn.net/BadAyase/article/details/103905615?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

3 windows下安装

  • 1 把文件夹中的两个文件拷贝到运行文件exe的目录下,即可
    在这里插入图片描述

4 Linux下使用

一开是我直接运行程序时,曝出的错误为:
在这里插入图片描述
测试使用的代码为:

    qDebug() << "Is SSL Enabled? " << QSslSocket::supportsSsl();
    qDebug() << "SSL Library Build Version (Qt compiled against): " << QSslSocket::sslLibraryBuildVersionString();
    qDebug() << "SSL Library Version String (available locally): " << QSslSocket::sslLibraryVersionString();

解决方法:找到自己Qt安装目录下的ssl库(在Qt的目录下面)
在这里插入图片描述
在.pro文件中,引入动态连接库:

LIBS += -L/opt/Qt/Tools/OpenSSL/binary/lib  -lcrypto # -libssl

然后,解决问题,nice!
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星蓝雨

如果觉得文章不错可以请喝咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值