技术专栏
嵌入式QT应用程序与WEB端通信遇到的HTTPS校验证书的问题记录
1、问题背景描述
近期在做嵌入式QT应用程序与物联网平台交互。其实这个需求我在以往的工作中也做过,只不过这次的情况有些特殊。当我使用 QNetworkAccessManager 向平台分别发起 POST 和 GET 请求时,打印错误如下:
这个问题在PC端并没有出现,而是在嵌入式平台瑞芯微RV1109上出现了。
2、解决方案
参考了stackoverflow.com上网友给出的解决方案:
意思是说忽略所谓的 SSL 验证模式,这样的话问题就能够解决了。那么PC端为什么不会出现这个问题呢?是因为PC端之前就安装了云平台部门给的证书,因此PC端即使不加上面那几行代码也是可以正常运行的。而开发板不能校验通过的原因是因为开发板上没有权威的根证书,因此导致校验云平台的证书没有通过。
什么是SSL ?
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
有关 QT 下 SSL 证书认证的三种方式:
(1)忽略校验证书
QSslConfiguration config ;
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1);
QNetworkRequest request(req);
request.setSslConfiguration(config);
(2)否允许在请求中使用HTTP管道
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请求:
显示效果如下:
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
点赞
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:524次2023-08-24 16:04:19
-
浏览量:797次2023-11-24 15:49:33
-
浏览量:1849次2020-08-03 11:18:53
-
浏览量:3803次2020-07-17 16:50:14
-
浏览量:554次2023-05-31 13:58:11
-
浏览量:2725次2020-12-16 10:07:26
-
浏览量:1741次2020-02-20 12:47:11
-
浏览量:770次2023-12-25 15:42:30
-
浏览量:496次2023-12-11 15:57:50
-
浏览量:1378次2020-06-19 10:07:41
-
浏览量:1774次2023-11-27 14:27:54
-
浏览量:1772次2019-09-06 09:28:53
-
浏览量:1338次2022-12-27 08:55:13
-
浏览量:1259次2023-11-03 17:39:10
-
浏览量:1750次2020-01-03 10:44:52
-
浏览量:1936次2020-08-20 18:00:36
-
浏览量:700次2023-08-04 13:41:07
-
浏览量:2394次2020-08-19 16:46:46
-
浏览量:2413次2020-08-20 17:57:43
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
bonjour
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注