QT充当客户端模拟浏览器等第三方客户端对https进行双向验证
在 ssl单向证书和双向证书校验测试及搭建流程 文章中,已经做了基于https的单向认证和双向认证,,,
在进行双向认证时,采用的是curl工具或浏览器充当客户端去验证。
此次采用QT提供的接口去开发客户端向服务器发送请求,来验证https的双向认证流程。
1、准备
依然以 ssl单向证书和双向证书校验测试及搭建流程 该文章作为前提条件进行开发。
开发环境:
客户端:Win10-64 + Qt5.13-MingW.32
服务端:Linux + openssl-1.1.1.f + nginx/1.18.0
2、分析
实际上在上文所指向的文章中,我们通过curl命令行来作为客户端向服务器发起了基于https的双向认证。见下图。
在这里指定了客户端私钥和客户端的证书。。。
再次回顾用浏览器充当客户端去进行https的双向认证,在那里我们事先导入了客户端的p12证书,p12证书实际上是客户端crt证书和客户端私钥key的结合体。
综上所述,两种方法中有一个共性,就是发送时都需要客户端的证书和私钥。。
双向校验时,肯定是要携带客户端的证书给服务器的。。。。
那么自然的,在QT中也要按照此套路开发(发送请求时携带证书与私钥),,,QT也提供了相应的接口。
2、核心代码
void MainWindow::testSsl()
{// 加载客户端证书QFile crtFile("C:\\Users\\XingWei\\Documents\\untitled42\\client.crt");crtFile.open(QIODevice::ReadOnly);QSslCertificate certificate(&crtFile, QSsl::Pem);crtFile.close();// 加载客户端私钥QByteArray passPhrase("123456"); // 私钥的密码QFile keyFile("C:\\Users\\XingWei\\Documents\\untitled42\\client.key");keyFile.open(QIODevice::ReadOnly);QSslKey privateKey(&keyFile, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey, passPhrase);keyFile.close();// ssl配置QSslConfiguration conf;conf.setPeerVerifyMode(QSslSocket::QueryPeer);conf.setProtocol(QSsl::TlsV1SslV3);conf.setPrivateKey(privateKey);conf.setLocalCertificate(certificate);QNetworkRequest request;request.setUrl(QUrl("https://50.50.1.118"));request.setSslConfiguration(conf);QEventLoop loop;QNetworkReply* reply = m_manager.get(request);connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);connect(reply, &QNetworkReply::finished, this, [=] {qDebug() << "####################### get data finished...";QByteArray data = reply->readAll();qDebug() << data;});loop.exec();qDebug() << "#############> " << reply->errorString() << reply->error();
}
3、运行及抓包分析
通过抓包,可以明显的看出,客户端和服务器各自向彼此发送了各自的证书。。
同时,服务器也正常响应客户端了。。
QT充当客户端模拟浏览器等第三方客户端对https进行双向验证相关推荐
- telnet客户端模拟浏览器发送请求
telnet 客户端 telnet客户端能够发出请求去连接服务器(模拟浏览器) 使用telnet之前,需要开启telnet客户端 1.进入控制面板 2.进入程序和功能,选择打开或关闭windows功能 ...
- 如果使用 Python3(Flask) 一步一步模拟一个网页微信客户端
目录 Web Weixin Pipeline 一.获取登录的二维码 1.1.打开浏览器输入下面网址 1.2.梳理原理 1.3.代码实现 1.4.启动测试 二.扫码成功 2.1.扫码状态 2.2.原理状 ...
- 基于node.js的ws模块和net模块实现的浏览器与tcp客户端实时通讯小例程
适用于物联网设备的接入,网页端实时监控终端数据的场景 项目运行 测试通讯 功能描述 项目运行 项目地址:tcp-ws 下载之后进入文件夹,控制台执行npm install安装依赖包. 安装完毕后npm ...
- 为什么越来越多的手机浏览器转型新闻客户端?
▍PMCAFF产品经理社区的咖友提问:为什么越来越多的手机浏览器转型新闻客户端? ● ● ● ▍ YDong 某大数据公司 产品经理 我从用户和生产商两个角度来谈谈. >>>& ...
- JAVA客户端数据传输_java模拟TCP通信实现客户端上传文件到服务器端
java模拟TCP通信实现客户端上传文件到服务器端,供大家参考,具体内容如下 客户端 package com.zr; import java.io.FileInputStream; import ja ...
- mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读
如果操作一下时报出错误:在数据库中执行 SET GLOBAL BINLOG_FORMAT = mixed; 执行后可通过SELECT * FROM information_schema.GLOBAL_ ...
- 第三方浏览器h5 android测试,H5案例分享:使用JS判断客户端、浏览器、操作系统类型...
使用JS判断客户端.浏览器.操作系统类型 一.JS判断客户端类型 JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Androi ...
- Qt Qml 开发超高清视频回放监控客户端
Qt Qml 开发超高清视频回放监控客户端 1.写在前面 之前一篇写了如何实现实时视频播放,而回放视频从原理上来讲其实差不多. 不同的是回放多了跳转.倍速.下载等等功能. 因此我们需要一个提供视频录像 ...
- QT -- TcpSocket实例,使用Qt中的tcp通信协议,构建客户端和服务端,实现局域网通信软件功能
Qt中使用Tcp构建通信客户端实现聊天信息发送连接等 1.简介 2.项目创建和界面构建 1)流程图 2)项目构建 3)界面构建 3.代码设计 1)项目pro添加 2)客户端设计 a. clientwi ...
最新文章
- 中方控股的Arm合资公司开始运营,还要在国内IPO
- VC++设置Release模式下允许调试代码
- C++14尝鲜:Generic Lambdas(泛型lambda)
- tf torch keras 数据增强 data augmentation
- Apache+Openssl
- C/C++中容易造成内存溢出的函数
- c语言关于链表选择题看不懂,有关链表基本操作三题
- 产品经理学习总结(1)——人人都是产品经理之需求文档语法
- Hibernate many-to-many
- 关于如何在Android、Java等非微软平台上建立高信任的SharePoint应用程序
- spark sql python_Spark 3.0开发近两年终于发布,流、Python、SQL重大更新详解
- 基于SpringBoot实现在线抽奖系统
- 火狐浏览器插件学习01
- SG90系列 MG系列马达
- SRS RTC NACK源码分析—1
- 登录谷歌账号出现浏览器不安全的提示
- html做坦克大战的效果,HTML5实现坦克大战(一)
- 玩转OpenCV之一:关于OpenCV学习版本的选择
- 4.13 使用扇贝工具制作猥琐的老鼠 [Illustrator CC教程]
- [数论 斐波那契] 51nod1355. 斐波那契的最小公倍数
热门文章
- 【Visual Studio 2022】VS2022安装教程
- 浙大计算机学院硕士招生专业,择校指南 | 浙江大学2020届研究生招生专业目录...
- 公司企业怎么做一个网站?
- jsconfig.json 在ts跟js混合的项目失效
- 微信小程序入门2-创建一个微信小程序
- Java高并发 - JUC
- CAN总线数据记录仪在重型运输车辆中的应用
- 内网安全管理软件(内网安全管理软件的功能)
- linux 7 network fail,centOS 7下无法启动网络(service network start)错误解决办法
- ssm框架用html视图,ssm框架是前端还是后端技术分享