QSslCertificate Class

QSslCertificate 类为 X509 证书提供了方便的 API。更多

Header: #include <QSslCertificate>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

注意:该类中的所有函数都是可重入的

公共类型

enum class PatternSyntax { RegularExpression, Wildcard, FixedString }
enum 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)
(since 6.8) QSslCertificate(QSslCertificate &&other)
~QSslCertificate()
void clear()
QByteArray digest(QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5) const
QDateTime effectiveDate() const
QDateTime expiryDate() const
QList<QSslCertificateExtension> extensions() const
Qt::HANDLE handle() const
bool isBlacklisted() const
bool isNull() const
bool isSelfSigned() const
QString issuerDisplayName() const
QStringList issuerInfo(QSslCertificate::SubjectInfo subject) const
QStringList issuerInfo(const QByteArray &attribute) const
QList<QByteArray> issuerInfoAttributes() const
QSslKey publicKey() const
QByteArray serialNumber() const
QMultiMap<QSsl::AlternativeNameEntryType, QString> subjectAlternativeNames() const
QString subjectDisplayName() const
QStringList subjectInfo(QSslCertificate::SubjectInfo subject) const
QStringList subjectInfo(const QByteArray &attribute) const
QList<QByteArray> subjectInfoAttributes() const
void swap(QSslCertificate &other)
QByteArray toDer() const
QByteArray toPem() const
QString toText() const
QByteArray version() const
bool operator!=(const QSslCertificate &other) const
QSslCertificate &operator=(const QSslCertificate &other)
bool operator==(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)
bool importPkcs12(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() 返回一个 QSslCertificate 对象列表。您也可以从 DER(二进制)或 PEM(Base64)编码的捆绑包中加载证书,这些捆绑包通常存储为一个或多个本地文件,或存储在 Qt 资源中。

您可以调用isNull() 来检查证书是否为空。默认情况下,QSslCertificate 会生成一个空证书。空证书是无效的,但无效证书不一定是空的。如果要重置证书中的所有内容,请调用clear() 。

加载证书后,您可以通过调用version(),serialNumber(),issuerInfo() 和subjectInfo() 等访问函数中的一个,查找有关证书、证书主题和证书签发者的信息。您可以调用effectiveDate() 和expiryDate() 检查证书开始生效和过期的时间。publicKey() 函数以QSslKey 的形式返回证书主体的公钥。您可以调用issuerInfo() 或subjectInfo() 获取有关证书颁发者及其主体的详细信息。

QSslCertificate 内部存储为 X509 结构。您可以通过调用handle() 访问该句柄,但结果很可能不可携带。

另请参阅 QSslSocket,QSslKey,QSslCipher, 和QSslError

成员类型文档

enum class QSslCertificate::PatternSyntax

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

常量说明
QSslCertificate::PatternSyntax::RegularExpression0类似 Perl 的丰富模式匹配语法。
QSslCertificate::PatternSyntax::Wildcard1它提供了一种简单的模式匹配语法,类似于 shell(命令解释器)用于 "文件套选 "的语法。参见QRegularExpression::fromWildcard()。
QSslCertificate::PatternSyntax::FixedString2模式是一个固定的字符串。这相当于在使用 escape() 转义所有元字符的字符串上使用 RegularExpression 模式。这是默认设置。

enum 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与证书相关的电子邮件地址

成员函数文档

[explicit] QSslCertificate::QSslCertificate(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem)

通过从device 读取format 编码数据并使用找到的第一个证书来构建 QSslCertificate。随后,您可以调用isNull() 查看device 是否包含证书,以及该证书是否已成功加载。

[explicit] QSslCertificate::QSslCertificate(const QByteArray &data = QByteArray(), QSsl::EncodingFormat format = QSsl::Pem)

通过解析format 编码的data 并使用找到的第一个可用证书,构建 QSslCertificate。稍后可调用isNull() 查看data 是否包含证书,以及该证书是否已成功加载。

QSslCertificate::QSslCertificate(const QSslCertificate &other)

构建一个与other 完全相同的副本。

[noexcept, since 6.8] QSslCertificate::QSslCertificate(QSslCertificate &&other)

移动-从other 生成一个新的 QSslCertificate。

注意: moved-from 对象other 处于部分形成状态,其中唯一有效的操作是析构和赋新值。

此函数在 Qt 6.8 中引入。

[noexcept] QSslCertificate::~QSslCertificate()

摧毁QSslCertificate.

void QSslCertificate::clear()

清除证书内容,使其成为无效证书。

另请参阅 isNull()。

QByteArray QSslCertificate::digest(QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5) const

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

QDateTime QSslCertificate::effectiveDate() const

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

另请参阅 expiryDate()。

QDateTime QSslCertificate::expiryDate() const

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

另请参阅 effectiveDate()。

QList<QSslCertificateExtension> QSslCertificate::extensions() const

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

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

搜索并解析data 中以指定format 编码的所有证书,并以证书列表形式返回。

另请参阅 fromDevice()。

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

搜索并解析device 中以指定format 编码的所有证书,并以证书列表形式返回。

另请参阅 fromData()。

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

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

示例

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

另请参见 fromData().

Qt::HANDLE QSslCertificate::handle() const

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

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

警告: 使用该函数很可能无法移植,其返回值可能因平台而异,或因次要版本而变。

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

从指定的device 导入 PKCS#12 (pfx) 文件。PKCS#12 文件是一个可包含多个证书和密钥的捆绑文件。该方法从捆绑包中读取单个key 、其certificate 和任何相关的caCertificates 。如果指定了passPhrase ,则该 将用于解密该文件包。如果 PKCS#12 文件已成功加载,则返回true

注意: device 必须打开并准备读取。

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

返回证书中subject 的签发人信息,如果证书中没有subject 的信息,则返回空列表。每种类型可以有多个条目。

另请参阅 subjectInfo()。

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

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

另请参阅 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

返回subject 的信息,如果证书中没有subject 的信息,则返回空列表。每种类型可以有多个条目。

另请参阅 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

返回转换为人类可读文本的证书。

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

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

请注意,根证书(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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.