IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 嵌入式QT应用程序与WEB端通信遇到的HTTPS校验证书的问题记录 -> 正文阅读

[网络协议]嵌入式QT应用程序与WEB端通信遇到的HTTPS校验证书的问题记录

点击上方「嵌入式应用研究院」,选择「置顶公众号」第一时间查看嵌入式笔记!

1、问题背景描述

近期在做嵌入式QT应用程序与物联网平台交互。其实这个需求我在以往的工作中也做过,只不过这次的情况有些特殊。当我使用QNetworkAccessManager向平台分别发起POSTGET请求时,打印错误如下:

5c65ba6f2ddf7426ff53120b53de39c7.png

这个问题在PC端并没有出现,而是在嵌入式平台瑞芯微RV1109上出现了。

2、解决方案

参考了stackoverflow.com上网友给出的解决方案:

a58dc929d202ca5e1c967622bb24fd34.png

意思是说忽略所谓的SSL验证模式,这样的话问题就能够解决了。那么PC端为什么不会出现这个问题呢?是因为PC端之前就安装了云平台部门给的证书,因此PC端即使不加上面那几行代码也是可以正常运行的。而开发板不能校验通过的原因是因为开发板上没有权威的根证书,因此导致校验云平台的证书没有通过。

什么是SSL ?

SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。

有关QTSSL证书认证的三种方式:

(1)忽略校验证书

QSslConfiguration?config?;
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1);
QNetworkRequest?request(req);
request.setSslConfiguration(config);
(2)否允许在请求中使用HTTP管道

12fb97a3fead6a9144b594bb1cd51991.png

QNetworkRequest?request?;
request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute,?true);
QNetworkReply*?reply?=?QNetworkAccessManager::createRequest(op,?request,?outgoingData);
reply->ignoreSslErrors();
(3)手动加载证书
QSslConfiguration?config?;
QList<QSslCertificate>?certs?=?QSslCertificate::fromPath("C:\\FiddlerRoot.crt");
config.setCaCertificates(certs);
QNetworkRequest?request(req);
request.setSslConfiguration(config);

如果平台有强制要求必须认证证书的话,那么推荐第三种,手动将证书进行加载操作。

对开始请求的接口代码进行修改:

void?network_manage::startRequest(QUrl?url)
{
????QFileInfo?info(url.path());
????QString?fileName(info.fileName());??//获取文件名
????if(fileName.isEmpty())
????{
????????fileName?=?"index.html";
????}
????download_file?=?new?QFile(fileName);
????if(!download_file->open(QIODevice::WriteOnly))
????{
????????qDebug()<<"file?open?error";
????????delete?download_file;
????????download_file?=?0;
????????return?;
????}
????/*添加对QSsl的配置处理*/
????QSslConfiguration?config?=?m_netGetRequestHead.sslConfiguration();
????config.setPeerVerifyMode(QSslSocket::VerifyNone);
????config.setProtocol(QSsl::TlsV1SslV3);
????m_netGetRequestHead.setSslConfiguration(config);
????m_netGetRequestHead.setUrl(QUrl(url));
????/*添加对QSsl的配置处理*/
????/*进行GET请求,进行文件下载*/
????download_reply?=?download_manager.get(m_netGetRequestHead);
????connect((QObject?*)download_reply,?SIGNAL(finished()),this,?SLOT(DownLoad_FiLe_Finished()));
????connect((QObject?*)download_reply,?SIGNAL(readyRead()),this,?SLOT(DownLoad_File_ReadyRead()));
????connect((QObject?*)download_reply,?SIGNAL(downloadProgress(qint64,qint64)),?this,?SLOT(updateDown_Load_File_Progress(qint64,qint64)));
}

接下来在嵌入式平台上,能够看到正常发起的POST和GET请求:

6987131a022f698e155058df80ca5410.png

显示效果如下:

f15d9a54674fe7a753ef176b717bb63c.png

参考文献与引用

(N.d.). Retrieved from https://baike.baidu.com/item/ssl
(N.d.). Retrieved from https://doc.qt.io/archives/qt-4.8/qnetworkrequest.html
(N.d.). Retrieved from https://stackoverflow.com/questions/38379848/qnetworkaccessmanager-reset-tcp-connection
(N.d.).?Retrieved?from?https://blog.csdn.net/itjobtxq/article/details/8244509

往期精彩

瑞芯微RV1109 SDK编译&支持QT程序开发

如何添加APP到Buildroot里(以瑞芯微rv1126为例)

新产品立项了,作为嵌入式软件工程师该如何来开展设计工作?(个人经验分享)

手把手之如何在嵌入式Linux上运行QT应用程序(以百问网imx6ull开发板为例)

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:49:11  更:2021-10-30 12:49:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:38:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码