Qt Android 添加SSL认证/error TLS initialization——————附带详细解决方法

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

猜你喜欢

转载自blog.csdn.net/qq_33375598/article/details/112990837