Qt网络编程:QSslCertificate(SSL证书)

建议阅读:

如何创建一个自签名的SSL证书(X509)

创建自签名SSL证书

Windows系统生成自签名SSL证书

qt使用https协议获取数据的流程

windows创建自签名SSL证书所需工具

 

*.csr文件:证书签名请求文件

*.key文件:私钥文件

*.crt文件:证书文件

 

一、描述

QSslCertificate 存储 X509 证书结构(struct),通常用于验证身份并存储有关本地主机、远程连接的对等方或受信任的第三方证书颁发机构的信息。


二、类型成员

1、enum QSslCertificate::SubjectInfo:描述传递给 issuerInfo() 或 subjectInfo() 以获取有关证书颁发者或主题的信息的密钥。

  • Organization:“O” 组织名称。
  • CommonName:“CN”通用名称; 大多数情况下,这用于存储主机名。
  • LocalityName:“L” 地区。
  • OrganizationalUnitName:“OU” 组织单位名称。
  • CountryName:“C” 国家。
  • StateOrProvinceName:“ST” 州或省。
  • DistinguishedNameQualifier:专有名称限定符
  • SerialNumber:证书的序列号
  • EmailAddress:与证书关联的电子邮件地址


三、成员函数

1、void clear()

清除此证书的内容,使其成为空证书。

2、QByteArray digest(QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5)

返回此证书的加密摘要。

3、QDateTime effectiveDate()

返回证书生效的日期时间。

4、QDateTime expiryDate()

返回证书过期的日期时间。

5、QList<QSslCertificateExtension> extensions()

返回包含此证书的 X509 扩展名的列表。

6、[static] QList<QSslCertificate> fromData(const QByteArray &data, QSsl::EncodingFormat format = QSsl::Pem)

在字节数组里解析出证书数据。

QSsl::EncodingFormat:描述证书和密钥支持的编码格式。

  • QSsl::Pem:PEM 格式。
  • QSsl::Der:DER 格式。

7、[static] bool importPkcs12(QIODevice *device, QSslKey *key, QSslCertificate *certificate, QList<QSslCertificate> *caCertificates = nullptr, const QByteArray &passPhrase = QByteArray())

从指定设备导入 PKCS#12 (*.pfx) 文件。 PKCS#12 文件可以包含许多证书和密钥。此方法从文件中读取单个密钥、其证书和任何关联的CA证书。 可以指定了 passPhrase(密码)。如果成功加载 PKCS#12 文件,则返回 true。(设备必须打开)

8、bool isBlacklisted()

此证书是否被列入黑名单。

9、bool isSelfSigned()

证书是否是自签名的。颁发者和主题相同则证书被认为是自签名的。

10、QString issuerDisplayName()

返回描述发行者的名称。

11、QStringList issuerInfo(QSslCertificate::SubjectInfo subject)

返回证书中主题的颁发者信息。

12、QStringList issuerInfo(const QByteArray &attribute)

返回证书中属性的颁发者信息。

13、QList<QByteArray> issuerInfoAttributes()

返回在此证书的颁发者信息中具有值的属性列表。

14、QSslKey publicKey()

返回证书主题的公钥。

 15、QByteArray serialNumber()

以十六进制格式返回证书的序列号字符串。

16、QMultiMap<QSsl::AlternativeNameEntryType, QString> subjectAlternativeNames()

返回此证书的替代主题名称列表。

17、QString subjectDisplayName()

返回描述主题的名称。

18、QStringList subjectInfo(QSslCertificate::SubjectInfo subject)

返回主题信息。

19、QStringList subjectInfo(const QByteArray &attribute)

返回属性的主题信息。

20、QList<QByteArray> subjectInfoAttributes()

返回在此证书的主题信息中具有值的属性列表。

21、QByteArray toDer()

返回转换为 DER(二进制)编码表示的证书。

22、QByteArray toPem()

返回转换为 PEM (Base64) 编码表示的证书。

23、QString toText()

证书转换为可读的文本。

24、[static] QList<QSslError> verify(QList<QSslCertificate> certificateChain, const QString &hostName = QString())

验证证书链。 要验证的链在 certificateChain 参数中传递。 列表中的第一个证书应该是要验证的链的叶证书。 如果指定了 hostName,则还会检查证书以查看它是否对指定的主机名有效。
请注意,根 (CA) 证书不应包含在要验证的列表中。

25、QByteArray version()

 获取证书版本。


四、使用示例

使用上面链接中的方法创建一个证书文件并查看内容(注意:要把ssleay32.dll、libeay32.dll这两个文件复制到程序运行目录):

    QFile crtFile(":/server.crt");
    qDebug()<<crtFile.open(QIODevice::ReadOnly);
    QSslCertificate certificate(&crtFile, QSsl::Pem);
    crtFile.close();
    qDebug()<<certificate.isNull();
    qDebug()<<certificate.issuerDisplayName();
    qDebug()<<certificate.subjectDisplayName();
    qDebug()<<certificate.version();
    qDebug()<<certificate.serialNumber();
    qDebug()<<certificate.issuerInfo(QSslCertificate::Organization);
    qDebug()<<certificate.issuerInfo(QSslCertificate::CommonName);
    qDebug()<<certificate.issuerInfo(QSslCertificate::LocalityName);
    qDebug()<<certificate.issuerInfo(QSslCertificate::OrganizationalUnitName);
    qDebug()<<certificate.issuerInfo(QSslCertificate::CountryName);
    qDebug()<<certificate.issuerInfo(QSslCertificate::StateOrProvinceName);
    qDebug()<<certificate.issuerInfo(QSslCertificate::DistinguishedNameQualifier);
    qDebug()<<certificate.issuerInfo(QSslCertificate::SerialNumber);
    qDebug()<<certificate.issuerInfo(QSslCertificate::EmailAddress)<<endl;

    qDebug()<<certificate.subjectInfo(QSslCertificate::Organization);
    qDebug()<<certificate.subjectInfo(QSslCertificate::CommonName);
    qDebug()<<certificate.subjectInfo(QSslCertificate::LocalityName);
    qDebug()<<certificate.subjectInfo(QSslCertificate::OrganizationalUnitName);
    qDebug()<<certificate.subjectInfo(QSslCertificate::CountryName);
    qDebug()<<certificate.subjectInfo(QSslCertificate::StateOrProvinceName);
    qDebug()<<certificate.subjectInfo(QSslCertificate::DistinguishedNameQualifier);
    qDebug()<<certificate.subjectInfo(QSslCertificate::SerialNumber);
    qDebug()<<certificate.subjectInfo(QSslCertificate::EmailAddress)<<endl;

    qDebug()<<certificate.effectiveDate();
    qDebug()<<certificate.expiryDate();
//    qDebug()<<certificate.toText()<<endl;

    qDebug()<<certificate.subjectInfoAttributes();
    qDebug()<<certificate.issuerInfoAttributes();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值