相关文章推荐
Qt文档阅读笔记-HTTPS知识点-获取某站点SSL证书

Qt文档阅读笔记-HTTPS知识点-获取某站点SSL证书

基本概念

这里要先介绍几个类和函数

首先是QSslSocket:这个类提供了客户端和服务器之间的SSL加密socket连接。这个是基于TCP连接,可以传输加密数据,支持的协议有SSL3和TLS1.2。

通过两种方式建立安全连接,一种是使用即使的SSL握手,一个是延迟SLL握手。

在Qt中只要调用connectToHostEncrypted就可以建立一个安全的连接!

官方代码如下:

QSslSocket *socket = new QSslSocket(this);
connect(socket, SIGNAL(encrypted()), this, SLOT(ready()));
socket->connectToHostEncrypted("imap.example.com", 993);

下面再介绍一个类:QSslCipher

QSslCipher:是SSL的加密密码,通常是调用QSslSocket中的sessionCipher这个函数可以得到。

下面最后介绍一个类:QSslCertificate

顾名思义获取X509证书的API。


代码与实例

以百度为例!

程序运行截图如下:

下面来看看百度的证书

程序源码如下:

#include <QCoreApplication>
#include <QSslSocket>
#include <QObject>
#include <QSslCipher>
#include <QSslCertificate>
#include <QList>
#include <QDebug>
#include <QEventLoop>
int main(int argc, char *argv[])
QCoreApplication a(argc, argv);
QSslSocket *socket = new QSslSocket;
socket->connectToHostEncrypted("www.baidu.com", 443);
QEventLoop loop;
QObject::connect(socket, SIGNAL(encrypted()), &loop, SLOT(quit()));
loop.exec();
//会话的套接字密码
qDebug() << "套接字密码:↓";
QSslCipher ciph = socket->sessionCipher();
if(ciph.isNull()){
qDebug() << "没有设置套接字密码,溜了!";
return 0;
qDebug() << QString("%1, %2 (%3/%4)").arg(ciph.authenticationMethod())
.arg(ciph.name()).arg(ciph.usedBits()).arg(ciph.supportedBits());
//获取认证信息
qDebug() << "认证信息:↓";
const QList<QSslCertificate> chainList = socket->peerCertificateChain();
for(int i = 0; i < chainList.size(); i++){
qDebug() << QString("%1%2 (%3)").arg(!i ? QString() : ("Issued by: "))
.arg(chainList[i].subjectInfo(QSslCertificate::Organization).join(QLatin1Char(' ')))
.arg(chainList[i].subjectInfo(QSslCertificate::CommonName).join(QLatin1Char(' ')));
qDebug() << "--------华丽的分割线--------";
 
推荐文章