分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

Qt5.7 实现Https 认证全过程解析(亲自动手版)

发布时间:2023-09-06 01:53责任编辑:顾先生关键词:暂无标签

#### 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 认证全过程解析(亲自动手版)

原文地址:https://www.cnblogs.com/jk-Huan/p/9025484.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved