QSslCertificate 类
The QSslCertificate class provides a convenient API for an X509 certificate. 更多...
头文件 | #include <QSslCertificate> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
- 所有成员列表,包括继承的成员
- QSslCertificate 是网络编程 API 和隐式共享类的一部分。
注意: 此类中的所有函数都是重入的。
公共类型
枚举类 | 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() | |
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(),它返回一个证书列表。您还可以从DER(二进制)或PEM(Base64)编码的包中加载证书,通常存储为一个或多个本地文件,或在Qt资源中。
您可以通过调用isNull()来检查您的证书是否为null。默认情况下,QSslCertificate构造一个null证书。null证书是无效的,但无效的证书不一定为null。如果您想重置证书中的所有内容,请调用clear().
加载证书后,您可以通过调用诸如version()、serialNumber()、issuerInfo()和subjectInfo()等众多访问器函数来找到有关证书的详细信息,以及其主题和颁发者。您可以通过调用effectiveDate()和expiryDate()来检查证书何时开始生效以及何时过期。函数publicKey()返回证书主题的公用密钥作为QSslKey。您可以通过调用issuerInfo()或subjectInfo()来获取有关证书颁发者及其主题的详细信息。
内部,QSslCertificate存储为X509结构。您可以通过调用handle()来访问此句柄,但结果可能不可移植。
另请参阅QSslSocket、QSslKey、QSslCipher和QSslError。
成员类型说明
enum class QSslCertificate::PatternSyntax
用于解释模式含义的语法。
常数 | 值 | 描述 |
---|---|---|
QSslCertificate::PatternSyntax::RegularExpression | 0 | 丰富类似于 Perl 的模式匹配语法。 |
QSslCertificate::PatternSyntax::Wildcard | 1 | 这提供了一个类似于用于“文字匹配”的 shell(命令解释器)的简单模式匹配语法。参见 QRegularExpression::fromWildcard()。 |
QSslCertificate::PatternSyntax::FixedString | 2 | 模式是一个固定字符串。这相当于使用 escape() 方法逃逸所有元字符的正则表达式模式在字符串上。这是默认设置。 |
枚举 QSslCertificate::SubjectInfo
描述了您可以传递给 QSslCertificate::issuerInfo() 或 QSslCertificate::subjectInfo() 的键,以获取证书颁发者或主题的信息。
常数 | 值 | 描述 |
---|---|---|
QSslCertificate::Organization | 0 | "O" 组织名称。 |
QSslCertificate::CommonName | 1 | "CN" 通用名称;通常用于存储主机名。 |
QSslCertificate::LocalityName | 2 | "L" 地区。 |
QSslCertificate::OrganizationalUnitName | 3 | "OU" 组织单位名称。 |
QSslCertificate::CountryName | 4 | "C" 国家。 |
QSslCertificate::StateOrProvinceName | 5 | "ST" 州或省。 |
QSslCertificate::DistinguishedNameQualifier | 6 | 鉴定名称限定符 |
QSslCertificate::SerialNumber | 7 | 证书的序列号 |
QSslCertificate::EmailAddress | 8 | 与证书关联的电子邮件地址 |
成员函数说明
[明确]
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. 在芬兰和/或其他国家和地区注册的商标。所有其他商标均为各自所有者的财产。