本页内容

QSslCertificate Class

QSslCertificate 类为 X509 证书提供了一个便捷的 API。更多内容...

头文件: #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)
(since 6.10) QList<QSslCertificate> fromFile(const QString &filePath, 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该模式是一个固定字符串。这相当于对一个字符串使用 RegularExpression 模式,其中所有元字符都已通过 escape() 进行转义。这是默认行为。

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 的完全相同的副本。

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

从 `other` 通过 `move` 构造一个新的 `QSslCertificate`。

注意: 被移动的源对象 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

返回一个包含该证书的 X.509 扩展的列表。

[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, since 6.10] QList<QSslCertificate> QSslCertificate::fromFile(const QString &filePath, QSsl::EncodingFormat format = QSsl::Pem)

从文件filePath 中读取数据,解析所有采用指定format 编码的证书,并返回一个QSslCertificate 对象的列表。

如果filePath 不是普通文件,则该方法将返回一个空列表。

该函数在 Qt 6.10 中引入。

另请参阅 fromData() 和fromPath()。

[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::Wildcard);
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 。

© 2026 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.