#### NetworkRequestManager.h

#include <QSsl>
#include <QSslKey>
#include <QSslSocket>
#include <QSslConfiguration>
#include <QSslCertificate>
#include <QSslError>
#include <QUrl>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QtNetwork>

class NetworkRequestManager : public QObject
{
Q_OBJECT
public:
explicit NetworkRequestManager(QObject *parent = 0);
void sendMsg(const QString& ,const QString&, const QString&);
void sendMsgWithoutToken(const QString&, const QString&);

private:
QSslConfiguration m_sslconf;
QNetworkRequest m_request;
QNetworkAccessManager *m_manager;

signals:
void PostRequestFinished(const QJsonObject&);

private slots:
void RequestFinished(QNetworkReply*);
void sslErrorsH(QNetworkReply*, QList<QSslError>);
};

#endif // NETWORKREQUESTMANAGER_H

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

1. pc-client.crt 

2. pc-client.key

3. pc-server.pem

 这3个秘钥文件都是用服务器生成的,在本机用p12文件生成,不知什么原因无法认证成功,也许是因为不会用 openssl ,求大神全解。。

 关于Https的认证过程,自行百度吧。。 QNetwork 类还是封装的不错的,都是以异步处理的,而且可以配合Json字符串的解析。。

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

#### NetworkRequestManager.cpp

NetworkRequestManager::NetworkRequestManager(QObject *parent) : QObject(parent)
{
// Https ca certificate ..
// 创建客户端证书
QFile t_file(":/https/license/pc-client.crt");
t_file.open(QIODevice::ReadOnly);
const QSslCertificate certificate(&t_file, QSsl::Pem);
t_file.close();

// 创建客户端私钥
t_file.setFileName(":/https/license/pc-client.key");
t_file.open(QIODevice::ReadOnly);
const QSslKey prvateKey(&t_file, QSsl::Rsa);
t_file.close();

// SSL验证模式;TLS协议版本
m_sslconf.setPeerVerifyMode(QSslSocket::VerifyPeer);
m_sslconf.setProtocol(QSsl::TlsV1_2OrLater);
m_sslconf.setLocalCertificate(certificate);
m_sslconf.setPrivateKey(prvateKey);

// 创建服务器端证书
QList<QSslCertificate> caCerList;
t_file.setFileName(":/https/license/pc-server.pem");
t_file.open(QIODevice::ReadOnly);
const QSslCertificate cACertificate(&t_file, QSsl::Pem);
// 将服务证书加入到CA列表中
caCerList.append(cACertificate);
m_sslconf.setCaCertificates(caCerList);
t_file.close();

this->m_manager = new QNetworkAccessManager;
m_request.setSslConfiguration(m_sslconf);
QObject::connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(RequestFinished(QNetworkReply*)));
QObject::connect(m_manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(sslErrorsH(QNetworkReply*,QList<QSslError>)));
}

void NetworkRequestManager::sslErrorsH(QNetworkReply *reply, QList<QSslError> error)
{
qDebug() <<"** sslErrorsH .." <<error;
}

void NetworkRequestManager::RequestFinished(QNetworkReply *reply)
{
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QVariant statusCodeV =
reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

QJsonDocument jdoc = QJsonDocument::fromJson(reply->readAll().constData());
QJsonObject obj = jdoc.object();

qDebug() <<"** RequestFinished" <<reply->isFinished() <<statusCode;

if(!obj.isEmpty()) emit this->PostRequestFinished(obj);
reply->deleteLater();
}

Qt5.7 实现Https 认证全过程解析(亲自动手版)的更多相关文章

  1. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  2. AFNetworking之于https认证

    写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限.并且这一块内容独立性比较强,所以单独拎出来,写成一篇. 本文从源码的角度 ...

  3. Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端超安全通信

    紧接着<Tomcat单向Https验证搭建,亲自实现与主流浏览器.Android/iOS移动客户端安全通信>,此处演示下更安全的双向Https认证的通信机制,为了清晰明了,以下进行单独描述 ...

  4. Tomcat单向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端安全通信

    众所周知,iOS9已经开始在联网方面默认强制使用Https替换原来的Http请求了,虽然Http和Https各有各的优势,但是总得来说,到了现在这个安全的信息时代,开发者已经离不开Https了. 网上 ...

  5. AFNetworking 之于 https 认证

    写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限.并且这一块内容独立性比较强,所以单独拎出来,写成一篇. 本文从源码的角度 ...

  6. 【转】AFNetworking之于https认证

    转自:http://www.cocoachina.com/ios/20161220/18393.html 写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想 ...

  7. Linux下Apache https认证

    参考:http://kyfxbl.iteye.com/blog/1910891 http://showerlee.blog.51cto.com/2047005/1266712 一.环境 httpd:A ...

  8. https认证

    HTTPS认证 说明 1. HTTPS协议的站点信息更加安全,同时可降低网站被劫持的风险,如网站同时存在HTTP和HTTPS站点,可使用本工具进行认证,便于百度搜索识别网站HTTP与HTTPS之间的对 ...

  9. Harbor配置https认证

    Harbor配置https认证由于Harbor不附带任何证书,它默认使用HTTP来提供注册表请求.但是,强烈建议为任何生产环境启用安全性.因为测试使用,使用自签名证书: 1.创建CA证书 首先创建个目 ...

随机推荐

  1. Linux IPC实践(13) --System V IPC综合实践

    实践:实现一个先进先出的共享内存shmfifo 使用消息队列即可实现消息的先进先出(FIFO), 但是使用共享内存实现消息的先进先出则更加快速; 我们首先完成C语言版本的shmfifo(基于过程调用) ...

  2. javascript之JSON引入

    JSON: JavaScript Object Notation   JavaScript 对象表示法. 由于现在很多在服务器获取数据,很多都涉及json数据格式,因此学习json非常有必要. * 语 ...

  3. OC语言实现中等难度通讯录

    实现中等难度通讯录.需求: 1.定义联系⼈人类Contact.实例变量:姓名(拼⾳音,⾸首字⺟母⼤大写).性别.电话号码. 住址.分组名称.年龄.⽅方法:⾃自定义初始化⽅方法(姓名.电话号码).显⽰示 ...

  4. java的输出类

    System.out这个类是PrintStream类,定义如下 public class PrintStream extends FilterOutputStream PrintStream都是用pr ...

  5. Linux0.11小结

    第一部分 基础内容 1.操作系统基础     操作系统是计算机硬件系统与用户程序间重要环节,理解操作系统的原理是编写优秀代码的基础.教课书中阐述的操作系统一般由5部分组成. 一个最简单的操作系统,可以 ...

  6. Android帧布局(Frame Layout)

    Android帧布局(Frame Layout) FrameLayout是最简单的一个布局管理器.FrameLayout为每个加入其中的组件创建一个空白区域(一帧),这些组件根据layout_grav ...

  7. RabbitMQ 队列

    http://blog.chinaunix.net/uid/22312037/sid-163962-abstract-1.html http://bobo896.blog.163.com/blog/# ...

  8. AngularJS进阶(十五)Cookie 'data' possibly not set or overflowed because it was too large

    Cookie 'data' possibly not set or overflowed because it was too large (5287 > 4096 bytes)! 注:请点击此 ...

  9. linux socket编程之TCP与UDP

    转:http://blog.csdn.net/gaoxin1076/article/details/7262482 TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制 ...

  10. Spring 官网jar下载

    1,首先输入http://spring.io/进入Spring官网 2,点击project 栏,找到Spring framwork 3,点击reference 4,找到Distribution Zip ...