QSslCertificate 类

The QSslCertificate class provides a convenient API for an X509 certificate. 更多...

头文件 #include <QSslCertificate>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network

注意: 此类中的所有函数都是重入的。

公共类型

枚举类PatternSyntax { RegularExpression, Wildcard, FixedString }
枚举SubjectInfo { Organization, CommonName, LocalityName, OrganizationalUnitName, CountryName, …, EmailAddress }

公共函数

QSslCertificate(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem)
QSslCertificate(const QByteArray &data = QByteArray(), QSsl::EncodingFormat format = QSsl::Pem)
QSslCertificate(const QSslCertificate &other)
~QSslCertificate()
voidclear()
QByteArraydigest(QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5) const
QDateTimeeffectiveDate() const
QDateTimeexpiryDate() const
QList<QSslCertificateExtension>extensions() const
Qt::HANDLEhandle() const
boolisBlacklisted() const
boolisNull() const
boolisSelfSigned() const
QStringissuerDisplayName() const
QStringListissuerInfo(QSslCertificate::SubjectInfo subject) const
QStringListissuerInfo(const QByteArray &attribute) const
QList<QByteArray>issuerInfoAttributes() const
QSslKeypublicKey() const
QByteArrayserialNumber() const
QMultiMap<QSsl::AlternativeNameEntryType, QString>subjectAlternativeNames() const
QStringsubjectDisplayName() const
QStringListsubjectInfo(QSslCertificate::SubjectInfo subject) const
QStringListsubjectInfo(const QByteArray &attribute) const
QList<QByteArray>subjectInfoAttributes() const
voidswap(QSslCertificate &other)
QByteArraytoDer() const
QByteArraytoPem() const
QStringtoText() const
QByteArrayversion() const
booloperator!=(const QSslCertificate &other) const
QSslCertificate &operator=(const QSslCertificate &other)
booloperator==(const QSslCertificate &other) const

静态公共成员

QList<QSslCertificate>fromData(const QByteArray &data, QSsl::EncodingFormat format = QSsl::Pem)
QList<QSslCertificate>fromDevice(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem)
QList<QSslCertificate>fromPath(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = PatternSyntax::FixedString)
boolimportPkcs12(QIODevice *device, QSslKey *key, QSslCertificate *certificate, QList<QSslCertificate> *caCertificates = nullptr, const QByteArray &passPhrase = QByteArray())
QList<QSslError>verify(const QList<QSslCertificate> &certificateChain, const QString &hostName = QString())

详细描述

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

构造QSslCertificate有很多方法。最常见的方法是调用QSslSocket::peerCertificate(),它返回一个QSslCertificate对象,或者QSslSocket::peerCertificateChain(),它返回一个证书列表。您还可以从DER(二进制)或PEM(Base64)编码的包中加载证书,通常存储为一个或多个本地文件,或在Qt资源中。

您可以通过调用isNull()来检查您的证书是否为null。默认情况下,QSslCertificate构造一个null证书。null证书是无效的,但无效的证书不一定为null。如果您想重置证书中的所有内容,请调用clear().

加载证书后,您可以通过调用诸如version()、serialNumber()、issuerInfo()和subjectInfo()等众多访问器函数来找到有关证书的详细信息,以及其主题和颁发者。您可以通过调用effectiveDate()和expiryDate()来检查证书何时开始生效以及何时过期。函数publicKey()返回证书主题的公用密钥作为QSslKey。您可以通过调用issuerInfo()或subjectInfo()来获取有关证书颁发者及其主题的详细信息。

内部,QSslCertificate存储为X509结构。您可以通过调用handle()来访问此句柄,但结果可能不可移植。

另请参阅QSslSocketQSslKeyQSslCipherQSslError

成员类型说明

enum class QSslCertificate::PatternSyntax

用于解释模式含义的语法。

常数描述
QSslCertificate::PatternSyntax::RegularExpression0丰富类似于 Perl 的模式匹配语法。
QSslCertificate::PatternSyntax::Wildcard1这提供了一个类似于用于“文字匹配”的 shell(命令解释器)的简单模式匹配语法。参见 QRegularExpression::fromWildcard()。
QSslCertificate::PatternSyntax::FixedString2模式是一个固定字符串。这相当于使用 escape() 方法逃逸所有元字符的正则表达式模式在字符串上。这是默认设置。

枚举 QSslCertificate::SubjectInfo

描述了您可以传递给 QSslCertificate::issuerInfo() 或 QSslCertificate::subjectInfo() 的键,以获取证书颁发者或主题的信息。

常数描述
QSslCertificate::Organization0"O" 组织名称。
QSslCertificate::CommonName1"CN" 通用名称;通常用于存储主机名。
QSslCertificate::LocalityName2"L" 地区。
QSslCertificate::OrganizationalUnitName3"OU" 组织单位名称。
QSslCertificate::CountryName4"C" 国家。
QSslCertificate::StateOrProvinceName5"ST" 州或省。
QSslCertificate::DistinguishedNameQualifier6鉴定名称限定符
QSslCertificate::SerialNumber7证书的序列号
QSslCertificate::EmailAddress8与证书关联的电子邮件地址

成员函数说明

[明确] QSslCertificate::QSslCertificate(QIODevice *设备, QSsl::EncodingFormat 格式 = QSsl::Pem)

通过从 设备 读取 格式 编码的数据并使用找到的第一个证书来构造 QSslCertificate。您可以稍后调用 isNull() 来查看 设备 是否包含证书,并且此证书是否已成功加载。

[明确] QSslCertificate::QSslCertificate(const QByteArray &数据 = QByteArray(), QSsl::EncodingFormat 格式 = QSsl::Pem)

通过解析 格式 编码的 数据 并使用找到的第一个可用证书来构造 QSslCertificate。您可以稍后调用 isNull() 来查看 数据 是否包含证书,并且此证书是否已成功加载。

QSslCertificate::QSslCertificate(const QSslCertificate &其他)

构造 其他 的一个相同副本。

[非异常] QSslCertificate::~QSslCertificate()

销毁 QSslCertificate

void QSslCertificate::clear()

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

另请参阅isNull()。

QByteArray QSslCertificate::digest(QCryptographicHash::Algorithm 算法 = QCryptographicHash::Md5) const

返回此证书的加密摘要。默认情况下,将生成 MD5 摘要,但您也可以指定自定义的 算法

QDateTime QSslCertificate::effectiveDate() const

返回证书开始生效的日期和时间,如果是空证书,则返回空的 QDateTime

另请参阅 expiryDate().

QDateTime QSslCertificate::expiryDate() const

返回证书过期的时间,如果这是一个空证书,则返回空 QDateTime

另请参阅 effectiveDate().

QList<QSslCertificateExtension> QSslCertificate::extensions() const

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

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

在指定的 format 中寻找并解析 data 中的所有证书,并将它们以证书列表的形式返回。

另请参阅 fromDevice().

[静态] QList<QSslCertificate> QSslCertificate::fromDevice(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem)

在指定的 device 中寻找并解析所有以指定 format 编码的证书,并将它们以证书列表的形式返回。

另请参阅 fromData().

[静态] QList<QSslCertificate> QSslCertificate::fromPath(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = PatternSyntax::FixedString)

在指定的 path 中搜索所有编码为指定 format 的证书,并将它们以列表形式返回。path 必须是一个文件或与多个文件匹配的模式,syntax 如指定。

示例

const auto certs = QSslCertificate::fromPath("C:/ssl/certificate.*.pem",
                                             QSsl::Pem, QSslCertificate::Wildcard);
for (const QSslCertificate &cert : certs) {
    qDebug() << cert.issuerInfo(QSslCertificate::Organization);
}

另请参阅 fromData().

Qt::HANDLE QSslCertificate::handle() const

如果存在,返回指向本地证书句柄的指针,否则返回 nullptr

您可以使用此句柄和本地 API 访问证书的扩展信息。

警告: 使用此函数很可能不可移植,并且其返回值可能因平台而异或从次要版本更改为次要版本。

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

从指定的 设备 导入PKCS#12(pfx)文件。PKCS#12文件是一个包含多个证书和密钥的打包文件。此方法从打包文件中读取一个 密钥、其 证书 以及任何关联的 caCertificates。如果指定了 passPhrase,则将使用它来解密打包文件。如果成功加载PKCS#12文件,则返回 true

注意:必须打开并准备好从 设备 读取。

bool QSslCertificate::isBlacklisted() const

如果此证书被列入黑名单,则返回 true;否则返回 false

另请参阅isNull()。

bool QSslCertificate::isNull() const

如果是空证书(即,没有内容的证书),则返回 true;否则返回 false

默认情况下,QSslCertificate 构建一个空证书。

另请参阅clear

bool QSslCertificate::isSelfSigned() const

如果是自签名证书,则返回 true;否则返回 false

如果一个证书的颁发者和主题相同,则被认为是自签名证书。

QString QSslCertificate::issuerDisplayName() const

返回描述发行者的名称。如果可用,则返回 QSslCertificate::CommonName,否则回退到第一个 QSslCertificate::Organization 或第一个 QSslCertificate::OrganizationalUnitName

另请参阅issuerInfo

QStringList QSslCertificate::issuerInfo(QSslCertificate::SubjectInfo subject) const

从证书中返回 主题 的发行者信息,如果没有证书中的 主题 信息,则返回空列表。可以有多个条目。

另请参阅subjectInfo

QStringList QSslCertificate::issuerInfo(const QByteArray &attribute) const

从证书中返回 属性 的发行者信息,如果没有证书中的 属性 信息,则返回空列表。可以有一个属性有多个条目。

另请参阅subjectInfo

QList<QByteArray> QSslCertificate::issuerInfoAttributes() const

返回此证书发行者信息中的属性的列表。可以通过使用 issuerInfo() 方法访问与给定属性相关的信息。请注意,此列表可能包括SSL后端不知道的任何元素的OID。

另请参阅subjectInfo

QSslKey QSslCertificate::publicKey() const

返回证书主题的公钥。

QByteArray QSslCertificate::serialNumber() const

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

QMultiMap<QSsl::AlternativeNameEntryType, QString> QSslCertificate::subjectAlternativeNames() const

返回此证书的替代主题名称列表。替代名称通常包含主机名,可带通配符,且对该证书有效。

这些名称将针对连接的对等方的域名进行测试,如果CommonName的主题信息未定义有效的域名,或者主题信息名称与对等方的域名不匹配。

另请参阅subjectInfo

QString QSslCertificate::subjectDisplayName() const

返回描述主题的名称。如果可用,返回QSslCertificate::CommonName,否则回退到第一个QSslCertificate::Organization或第一个QSslCertificate::OrganizationalUnitName

另请参阅subjectInfo

QStringList QSslCertificate::subjectInfo(QSslCertificate::SubjectInfo subject) const

返回主题的信息,或者如果证书中没有主题的信息,则返回空列表。每种类型可能有多个条目。

另请参阅issuerInfo

QStringList QSslCertificate::subjectInfo(const QByteArray &attribute) const

返回attribute的证书主题信息,或者如果证书中没有attribute的信息,则返回空列表。一个属性可能有多个条目。

另请参阅issuerInfo

QList<QByteArray> QSslCertificate::subjectInfoAttributes() const

返回在证书主题信息中有值的属性列表。可以通过使用subjectInfo()方法访问与给定属性关联的信息。请注意,此列表可能包括SSL后端不认识的任何元素的OID。

另请参阅subjectInfo

[noexcept] void QSslCertificate::swap(QSslCertificate &other)

other交换此证书实例。此函数非常快速且从未失败。

QByteArray QSslCertificate::toDer() const

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

QByteArray QSslCertificate::toPem() const

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

QString QSslCertificate::toText() const

返回此证书转换为可用于阅读的文本表示形式。

[静态] QList<QSslError> QSslCertificate::verify(const QList<QSslCertificate> &证书链, const QString &主机名 = QString())

验证证书链。要验证的链通过 证书链 参数传递。列表中第一个证书应该是要验证的链的叶证书。如果指定了 主机名,则还会检查证书是否对指定的主机名有效。

注意,根(CA)证书不应包含在要验证的列表中,它将自动使用默认 QSslConfiguration 中指定的 CA 列表进行查找,以及在可能的 Unix 和 Windows 上按需加载的 CA 证书。

QByteArray QSslCertificate::version() const

返回证书的版本字符串。

bool QSslCertificate::operator!=(const QSslCertificate &other) const

如果此证书不等于 other,则返回 true;否则返回 false

QSslCertificate &QSslCertificate::operator=(const QSslCertificate &other)

other 的内容复制到此证书中,使两个证书相同。

bool QSslCertificate::operator==(const QSslCertificate &other) const

如果此证书等于 other,则返回 true;否则返回 false

© 2024 The Qt Company Ltd. 本文档中的贡献包含各自所有者的版权。提供的文档根据 Free Software Foundation 发布的《GNU 自由文档许可证 1.3 版》的条款进行许可。Qt 及其相关标志是 The Qt Company Ltd. 在芬兰和/或其他国家和地区注册的商标。所有其他商标均为各自所有者的财产。