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

简介: 嵌入式QT应用程序与WEB端通信遇到的HTTPS校验证书的问题记录

1、问题背景描述

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

640.png

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

2、解决方案

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

640.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管道

640.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请求:

640.png

显示效果如下:

640.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开发板为例)


目录
相关文章
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
429 3
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
224 0
|
设计模式 前端开发 数据库
深入理解MVC设计模式:构建高效Web应用程序的基石
【7月更文挑战第4天】在软件工程领域,设计模式是解决常见问题的一系列经过验证的方法。其中,Model-View-Controller(MVC)设计模式自诞生以来,便成为了构建用户界面,特别是Web应用程序的黄金标准。MVC通过将应用程序逻辑分离为三个核心组件,提高了代码的可维护性、可扩展性和重用性。本文将深入探讨MVC设计模式的原理,并通过一个简单的代码示例展示其应用。
545 0
|
安全 网络协议 算法
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
1128 4
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
611 11
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
379 3
|
安全 前端开发 PHP
PHP与现代Web开发:构建高效和可扩展的应用程序
【8月更文挑战第29天】在这篇文章中,我们将深入探讨PHP如何适应现代Web开发的需求。我们将通过实际案例分析,揭示PHP的核心优势,并展示如何利用这些优势来构建高性能、可扩展的Web应用。文章不仅提供理论知识,还包括具体的代码示例,旨在帮助开发者更好地理解和运用PHP解决实际问题。
|
存储 监控 安全
如何构建安全的Web应用程序:全方位指南
【7月更文挑战第28天】构建安全的Web应用程序是一个持续的过程,需要贯穿于整个应用程序的生命周期中。通过规划阶段的安全设计、开发阶段的安全措施实施、测试阶段的漏洞发现与修复以及部署与运维阶段的持续监控与维护,可以显著提高Web应用程序的安全性。希望本文的全方位指南能够为您在构建安全的Web应用程序方面提供有益的参考。
|
监控 Python
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
|
监控 负载均衡 Java
如何设计高可用性的Java Web应用程序
如何设计高可用性的Java Web应用程序

推荐镜像

更多
  • qt