QSslConfiguration Class
QSslConfiguration 类保存了 SSL 连接的配置和状态。更多内容...
| 头文件: | #include <QSslConfiguration> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
- 所有成员的列表,包括继承的成员
- QSslConfiguration 属于“网络编程 API”和“隐式共享类”的一部分。
注意:该类中的所有函数均为可重入函数。
公共类型
| enum | NextProtocolNegotiationStatus { NextProtocolNegotiationNone, NextProtocolNegotiationNegotiated, NextProtocolNegotiationUnsupported } |
公共函数
| QSslConfiguration() | |
| QSslConfiguration(const QSslConfiguration &other) | |
| ~QSslConfiguration() | |
| void | addCaCertificate(const QSslCertificate &certificate) |
| void | addCaCertificates(const QList<QSslCertificate> &certificates) |
| bool | addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = QSslCertificate::PatternSyntax::FixedString) |
| QList<QByteArray> | allowedNextProtocols() const |
| QMap<QByteArray, QVariant> | backendConfiguration() const |
| QList<QSslCertificate> | caCertificates() const |
| QList<QSslCipher> | ciphers() const |
| QSslDiffieHellmanParameters | diffieHellmanParameters() const |
| bool | dtlsCookieVerificationEnabled() const |
| QList<QSslEllipticCurve> | ellipticCurves() const |
| QSslKey | ephemeralServerKey() const |
(since 6.0) bool | handshakeMustInterruptOnError() const |
| bool | isNull() const |
| QSslCertificate | localCertificate() const |
| QList<QSslCertificate> | localCertificateChain() const |
(since 6.0) bool | missingCertificateIsFatal() const |
| QByteArray | nextNegotiatedProtocol() const |
| QSslConfiguration::NextProtocolNegotiationStatus | nextProtocolNegotiationStatus() const |
| bool | ocspStaplingEnabled() const |
| QSslCertificate | peerCertificate() const |
| QList<QSslCertificate> | peerCertificateChain() const |
| int | peerVerifyDepth() const |
| QSslSocket::PeerVerifyMode | peerVerifyMode() const |
| QByteArray | preSharedKeyIdentityHint() const |
| QSslKey | privateKey() const |
| QSsl::SslProtocol | protocol() const |
| QSslCipher | sessionCipher() const |
| QSsl::SslProtocol | sessionProtocol() const |
| QByteArray | sessionTicket() const |
| int | sessionTicketLifeTimeHint() const |
| void | setAllowedNextProtocols(const QList<QByteArray> &protocols) |
| void | setBackendConfiguration(const QMap<QByteArray, QVariant> &backendConfiguration = QMap<QByteArray, QVariant>()) |
| void | setBackendConfigurationOption(const QByteArray &name, const QVariant &value) |
| void | setCaCertificates(const QList<QSslCertificate> &certificates) |
| void | setCiphers(const QList<QSslCipher> &ciphers) |
(since 6.0) void | setCiphers(const QString &ciphers) |
| void | setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams) |
| void | setDtlsCookieVerificationEnabled(bool enable) |
| void | setEllipticCurves(const QList<QSslEllipticCurve> &curves) |
(since 6.0) void | setHandshakeMustInterruptOnError(bool interrupt) |
(since 6.12) void | setKeyingMaterial(const QList<QSslKeyingMaterial> &keyMaterial) |
| void | setLocalCertificate(const QSslCertificate &certificate) |
| void | setLocalCertificateChain(const QList<QSslCertificate> &localChain) |
(since 6.0) void | setMissingCertificateIsFatal(bool cannotRecover) |
| void | setOcspStaplingEnabled(bool enabled) |
| void | setPeerVerifyDepth(int depth) |
| void | setPeerVerifyMode(QSslSocket::PeerVerifyMode mode) |
| void | setPreSharedKeyIdentityHint(const QByteArray &hint) |
| void | setPrivateKey(const QSslKey &key) |
| void | setProtocol(QSsl::SslProtocol protocol) |
| void | setSessionTicket(const QByteArray &sessionTicket) |
| void | setSslOption(QSsl::SslOption option, bool on) |
| void | swap(QSslConfiguration &other) |
(since 6.12) QList<QSslKeyingMaterial> | takeKeyingMaterial() |
(since 6.12) std::optional<QSslKeyingMaterial> | takeKeyingMaterial(const QSslKeyingMaterial &material) |
| bool | testSslOption(QSsl::SslOption option) const |
| bool | operator!=(const QSslConfiguration &other) const |
| QSslConfiguration & | operator=(const QSslConfiguration &other) |
| bool | operator==(const QSslConfiguration &other) const |
静态公共成员
| const char[] | ALPNProtocolHTTP2 |
| const char[] | NextProtocolHttp1_1 |
| QSslConfiguration | defaultConfiguration() |
| QSslConfiguration | defaultDtlsConfiguration() |
| void | setDefaultConfiguration(const QSslConfiguration &configuration) |
| void | setDefaultDtlsConfiguration(const QSslConfiguration &configuration) |
| QList<QSslCipher> | supportedCiphers() |
| QList<QSslEllipticCurve> | supportedEllipticCurves() |
| QList<QSslCertificate> | systemCaCertificates() |
详细描述
Qt Network 类使用 QSslConfiguration 来传递有关已建立的 SSL 连接的信息,并允许应用程序控制该连接的某些功能。
QSslConfiguration 目前支持的设置包括:
- 要使用的 SSL/TLS 协议
- 连接过程中向对端出示的证书及其关联的私钥
- 允许用于加密连接的密码套件
- 用于验证对端证书的证书颁发机构 (CA) 证书列表
这些设置仅在连接握手期间生效。在连接建立后进行设置将无效。
QSslConfiguration 支持的状态包括:
- 对等方在握手过程中出示的证书,以及通向 CA 证书的证书链
- 用于加密此会话的加密套件
该状态只能在 SSL 连接开始后获取,但未必能在连接结束前获取。某些设置可能会在 SSL 连接过程中发生变化,而无需重启连接(例如,密码套件可能会随时间推移而更改)。
QSslConfiguration 对象中的状态无法更改。
QSslConfiguration 可与QSslSocket 和网络访问 API 配合使用。
请注意,仅修改 QSslConfiguration 中的设置不足以更改相关 SSL 连接的设置。您必须对已修改的 QSslConfiguration 对象调用 setSslConfiguration 方法才能实现这一目的。以下示例演示了如何在QSslSocket 对象中将协议更改为 TLSv1_2:
QSslConfiguration config = sslSocket.sslConfiguration();
config.setProtocol(QSsl::TlsV1_2);
sslSocket.setSslConfiguration(config);另请参阅 QSsl::SslProtocol 、QSslCertificate 、QSslCipher 、QSslKey 、QSslSocket 、QNetworkAccessManager 、QSslSocket::sslConfiguration() 以及QSslSocket::setSslConfiguration()。
成员类型文档
enum QSslConfiguration::NextProtocolNegotiationStatus
描述“下层协议协商”(NPN)或“应用层协议协商”(ALPN)的状态。
| 常量 | 值 | 描述 |
|---|---|---|
QSslConfiguration::NextProtocolNegotiationNone | 0 | (尚未)协商出任何应用协议。 |
QSslConfiguration::NextProtocolNegotiationNegotiated | 1 | 已协商出下一个协议(参见nextNegotiatedProtocol())。 |
QSslConfiguration::NextProtocolNegotiationUnsupported | 2 | 客户端和服务器无法就一个共同的下一个应用协议达成一致。 |
成员函数文档
QSslConfiguration::QSslConfiguration()
构建一个空的 SSL 配置。该配置不包含任何有效设置,且状态为空。调用此构造函数后,isNull() 将返回 true。
一旦调用任何设置方法,isNull() 方法将返回 false。
QSslConfiguration::QSslConfiguration(const QSslConfiguration &other)
复制other 的配置和状态。如果other 为null,则该对象也将为null。
[noexcept] QSslConfiguration::~QSslConfiguration()
释放由 `QSslConfiguration` 占用的所有资源。
void QSslConfiguration::addCaCertificate(const QSslCertificate &certificate)
将certificate 添加到该配置的 CA 证书数据库中。必须在 SSL 握手之前设置证书数据库。在握手阶段,套接字会使用该 CA 证书数据库来验证对端的证书。
注意: 默认配置使用 系统 CA 证书数据库。如果该数据库不可用(如 iOS 系统中常见的情况),则默认数据库为空。
另请参阅 caCertificates()、setCaCertificates() 和addCaCertificates()。
void QSslConfiguration::addCaCertificates(const QList<QSslCertificate> &certificates)
将certificates 添加到此配置的 CA 证书数据库中。必须在 SSL 握手开始前设置证书数据库。在握手阶段,套接字会使用 CA 证书数据库来验证对端证书。
注意: 默认配置使用 系统 CA 证书数据库。如果该数据库不可用(如 iOS 系统中常见的情况),则默认数据库为空。
另请参阅 caCertificates()、setCaCertificates() 和addCaCertificate()。
bool QSslConfiguration::addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = QSslCertificate::PatternSyntax::FixedString)
搜索path 中的所有文件,查找使用指定format 编码的证书,并将它们添加到该套接字的CA证书数据库中。path 必须是一个文件,或者是一个符合syntax 中指定条件、可匹配一个或多个文件的模式。如果向套接字的CA证书数据库中添加了一个或多个证书,则返回true ;否则返回false 。
套接字在握手阶段会使用 CA 证书数据库来验证对端的证书。
若需更精确的控制,请使用addCaCertificate()。
另请参阅 addCaCertificate() 和QSslCertificate::fromPath()。
QList<QByteArray> QSslConfiguration::allowedNextProtocols() const
该函数返回可通过“下一个协议协商”(NPN)或“应用层协议协商”(ALPN)TLS扩展与服务器进行协商的允许协议,这些协议由setAllowedNextProtocols() 设置。
另请参阅 nextNegotiatedProtocol()、nextProtocolNegotiationStatus()、setAllowedNextProtocols() 以及QSslConfiguration::NextProtocolHttp1_1 。
QMap<QByteArray, QVariant> QSslConfiguration::backendConfiguration() const
返回后端特定的配置。
仅返回由 `setBackendConfigurationOption()` 或 `setBackendConfiguration()` 设置的选项。后端的内部标准配置不会被报告。
另请参阅 setBackendConfigurationOption() 和setBackendConfiguration()。
QList<QSslCertificate> QSslConfiguration::caCertificates() const
返回此连接的 CA 证书数据库。在握手阶段,套接字会使用该 CA 证书数据库来验证对端的证书。可以在握手开始前通过setCaCertificates()、addCaCertificate() 或addCaCertificates() 对其进行修改。
另请参阅 setCaCertificates()、addCaCertificate() 和addCaCertificates()。
QList<QSslCipher> QSslConfiguration::ciphers() const
返回此连接当前的加密密码套件。该列表用于握手阶段选择会话密码。返回的密码列表按优先级从高到低排序(即,列表中的第一个密码是优先级最高的密码)。 会话加密算法将是列表中第一个且被对端支持的加密算法。
默认情况下,握手阶段可以选择该系统 SSL 库支持的任何加密套件,而不同系统支持的加密套件可能有所不同。该系统 SSL 库支持的加密套件列表可通过supportedCiphers() 函数获取。 您可以通过调用setCiphers()并传入支持的加密套件子集,来限制用于选择此套接字会话加密套件的列表。若要恢复使用完整集合,请调用setCiphers()并传入由supportedCiphers()返回的列表。
另请参阅 setCiphers() 和supportedCiphers()。
[static] QSslConfiguration QSslConfiguration::defaultConfiguration()
返回将在新SSL连接中使用的默认SSL配置。
默认 SSL 配置包括:
- 无本地证书且无私钥
- 协议SecureProtocols
- 系统的默认 CA 证书列表
- 密码套件列表,其内容等同于 SSL 库支持的 128 位及以上 SSL 密码套件列表
另请参阅 supportedCiphers() 和setDefaultConfiguration()。
[static] QSslConfiguration QSslConfiguration::defaultDtlsConfiguration()
返回将在新 DTLS 连接中使用的默认 DTLS 配置。
默认的 DTLS 配置包括:
- 无本地证书且无私钥
- 协议 DtlsV1_2OrLater
- 系统的默认 CA 证书列表
- 密码套件列表与 SSL 库支持的 TLS 1.2 密码套件列表一致,且这些密码套件的密钥长度为 128 位或以上。
另请参阅 setDefaultDtlsConfiguration()。
QSslDiffieHellmanParameters QSslConfiguration::diffieHellmanParameters() const
获取当前的迪菲-赫尔曼参数集。
如果未设置任何迪菲-赫尔曼参数,QSslConfiguration 对象将默认使用 RFC 3526 中的 2048 位 MODP 群。
注意: 默认参数 在未来的 Qt 版本中可能会发生变化。请查阅您所使用的具体 Qt 版本的文档,以了解该版本采用的默认设置。
另请参阅 setDiffieHellmanParameters()。
bool QSslConfiguration::dtlsCookieVerificationEnabled() const
如果服务器端套接字启用了 DTLS Cookie 验证,则该函数返回 true。
另请参阅 setDtlsCookieVerificationEnabled()。
QList<QSslEllipticCurve> QSslConfiguration::ellipticCurves() const
返回此连接当前的椭圆曲线列表。该列表在握手阶段用于选择椭圆曲线(当使用椭圆曲线密码时)。返回的曲线列表按优先级从高到低排序(即列表中的第一条曲线是优先级最高的)。
默认情况下,握手阶段可选择该系统 SSL 库支持的任意椭圆曲线,而不同系统支持的曲线可能有所不同。该系统 SSL 库支持的椭圆曲线列表可通过 QSslSocket::supportedEllipticCurves() 获取。
您可以通过调用setEllipticCurves()并传入受支持曲线子集,来限制用于选择此套接字会话加密算法的曲线列表。若要恢复使用完整曲线集,请调用setEllipticCurves()并传入由QSslSocket::supportedEllipticCurves()返回的曲线列表。
另请参阅 setEllipticCurves 。
QSslKey QSslConfiguration::ephemeralServerKey() const
返回用于具有前向保密性的加密算法的临时服务器密钥,例如 DHE-RSA-AES128-SHA。
该临时密钥仅在客户端模式下可用,即QSslSocket::SslClientMode 。在服务器模式下运行或使用不具备前向保密性的加密算法时,将返回空密钥。临时服务器密钥将在发出 encrypted() 信号之前设置。
[since 6.0] bool QSslConfiguration::handshakeMustInterruptOnError() const
如果验证回调会在握手完成之前提前触发 `QSslSocket::handshakeInterruptedOnError()`,则返回 `true`。
注意: 对于除 OpenSSL 以外的所有后端,此 函数始终返回 false。
该函数在 Qt 6.0 中引入。
另请参阅 setHandshakeMustInterruptOnError()、QSslSocket::handshakeInterruptedOnError() 和QSslSocket::continueInterruptedHandshake()。
bool QSslConfiguration::isNull() const
如果这是一个空的QSslConfiguration 对象,则返回true 。
如果QSslConfiguration 对象是通过默认构造函数创建的,且未调用任何设置器方法,则该对象为 null。
另请参阅 setProtocol()、setLocalCertificate()、setPrivateKey()、setCiphers() 以及setCaCertificates()。
QSslCertificate QSslConfiguration::localCertificate() const
返回在 SSL 握手过程中要提交给对端的证书。
另请参阅 setLocalCertificate()。
QList<QSslCertificate> QSslConfiguration::localCertificateChain() const
返回在 SSL 握手过程中将向对端出示的证书链。
另请参阅 setLocalCertificateChain() 和localCertificate()。
[since 6.0] bool QSslConfiguration::missingCertificateIsFatal() const
如果无法忽略代码为QSslError::NoPeerCertificate 的错误,则返回true。
注意: 对于除 OpenSSL 以外的所有 TLS 后端,该函数始终 返回 false。
该函数在 Qt 6.0 中引入。
另请参阅 QSslSocket::ignoreSslErrors() 和setMissingCertificateIsFatal()。
QByteArray QSslConfiguration::nextNegotiatedProtocol() const
如果启用了“下一层协议协商”(NPN)或“应用层协议协商”(ALPN)TLS 扩展,则该函数将返回与服务器协商得到的协议。要启用 NPN/ALPN 扩展,必须在连接到服务器之前显式调用 `setAllowedNextProtocols()`。
如果无法协商出任何协议,或者未启用该扩展,则该函数返回一个值为 null 的QByteArray 。
另请参阅 setAllowedNextProtocols() 和nextProtocolNegotiationStatus()。
QSslConfiguration::NextProtocolNegotiationStatus QSslConfiguration::nextProtocolNegotiationStatus() const
该函数返回“下一层协议协商”(NPN)或“应用层协议协商”(ALPN)的状态。如果该功能尚未通过 `setAllowedNextProtocols()` 启用,则该函数返回 `NextProtocolNegotiationNone`。该状态将在发出 `encrypted()` 信号之前被设置。
另请参阅 setAllowedNextProtocols()、allowedNextProtocols()、nextNegotiatedProtocol() 以及QSslConfiguration::NextProtocolNegotiationStatus 。
bool QSslConfiguration::ocspStaplingEnabled() const
如果通过 setOCSPStaplingEnabled() 启用了 OCSP 钉合,则返回 true;否则返回 false(这是默认值)。
另请参阅 ` setOcspStaplingEnabled()`。
QSslCertificate QSslConfiguration::peerCertificate() const
返回对端的数字证书(即您所连接的主机的直接证书),如果对端未分配证书,则返回空证书。
对等方证书会在握手阶段自动进行验证,因此该函数通常用于获取证书以供显示或进行连接诊断。该证书包含有关对等方的信息,包括其主机名、证书签发者以及对等方的公钥。
由于对等方证书是在握手阶段设置的,因此通过连接到QSslSocket::sslErrors()信号、QNetworkReply::sslErrors()信号或QSslSocket::encrypted()信号的槽访问对等方证书是安全的。
如果返回空证书,则可能意味着 SSL 握手失败,也可能意味着您连接的主机没有证书,或者根本没有连接。
若要检查对等方的完整证书链,请使用peerCertificateChain() 一次性获取所有证书。
另请参阅 peerCertificateChain()、QSslSocket::sslErrors()、QSslSocket::ignoreSslErrors()、QNetworkReply::sslErrors() 以及QNetworkReply::ignoreSslErrors()。
QList<QSslCertificate> QSslConfiguration::peerCertificateChain() const
返回对等方的数字证书链,从对等方的直接证书开始,到证书颁发机构(CA)的证书结束。
在握手阶段会自动对对等方证书进行验证。该函数通常用于获取证书以供显示,或用于执行连接诊断。证书包含有关对等方和证书签发者的信息,包括主机名、签发者名称以及签发者的公钥。
由于对等方证书是在握手阶段设置的,因此通过连接到QSslSocket::sslErrors()信号、QNetworkReply::sslErrors()信号或QSslSocket::encrypted()信号的插槽访问对等方证书是安全的。
如果返回一个空列表,则可能意味着 SSL 握手失败,也可能意味着您连接的主机没有证书,或者根本没有连接。
若仅需获取对端的直接证书,请使用peerCertificate()。
另请参阅 peerCertificate()、QSslSocket::sslErrors()、QSslSocket::ignoreSslErrors()、QNetworkReply::sslErrors() 以及QNetworkReply::ignoreSslErrors()。
int QSslConfiguration::peerVerifyDepth() const
返回在 SSL 握手阶段需验证的对等方证书链中的最大证书数量;如果未设置最大深度,则返回 0(默认值),表示应验证整个证书链。
证书按签发顺序进行验证,从对等方的自身证书开始,然后是其签发者的证书,依此类推。
另请参阅 setPeerVerifyDepth() 和peerVerifyMode()。
QSslSocket::PeerVerifyMode QSslConfiguration::peerVerifyMode() const
返回验证模式。该模式决定QSslSocket 是否应向对等方请求证书(即客户端向服务器请求证书,或服务器向客户端请求证书),以及是否应要求该证书有效。
默认模式为 AutoVerifyPeer,这指示QSslSocket 对客户端使用 VerifyPeer,对服务器使用 QueryPeer。
另请参阅 setPeerVerifyMode()。
QByteArray QSslConfiguration::preSharedKeyIdentityHint() const
返回身份提示。
另请参阅 setPreSharedKeyIdentityHint()。
QSslKey QSslConfiguration::privateKey() const
返回分配给此连接的SSL key ,如果尚未分配,则返回空键。
另请参阅 setPrivateKey() 和localCertificate()。
QSsl::SslProtocol QSslConfiguration::protocol() const
返回此 SSL 配置的协议设置。
另请参阅 setProtocol()。
QSslCipher QSslConfiguration::sessionCipher() const
返回套接字的加密算法cipher ,如果连接未加密,则返回空加密算法。套接字在握手阶段会设置该会话的加密算法。该加密算法用于对通过套接字传输的数据进行加密和解密。
SSL 基础设施还提供了用于设置加密套件有序列表的函数,握手阶段将最终从该列表中选择会话加密套件。该有序列表必须在握手阶段开始之前就已准备就绪。
另请参阅 ciphers()、setCiphers() 和supportedCiphers()。
QSsl::SslProtocol QSslConfiguration::sessionProtocol() const
返回套接字的 SSL/TLS 协议;如果连接未加密,则返回 UnknownProtocol。该套接字在握手阶段会设置该会话的协议。
另请参阅 protocol() 和setProtocol()。
QByteArray QSslConfiguration::sessionTicket() const
如果已禁用QSsl::SslOptionDisableSessionPersistence ,则该函数将返回SSL握手过程中使用的会话票据,格式为ASN.1,便于将其持久化到磁盘等。如果未使用会话票据,或者QSsl::SslOptionDisableSessionPersistence 未被禁用,则该函数将返回一个空的QByteArray 。
注意:将会 话凭证持久化到磁盘或类似介质时 ,请务必注意不要将会话信息暴露给潜在的攻击者,因为一旦攻击者获知会话信息,便可能对使用该会话参数加密的数据进行窃听。
另请参阅 setSessionTicket()、QSsl::SslOptionDisableSessionPersistence 、setSslOption() 以及QSslSocket::newSessionTicketReceived()。
int QSslConfiguration::sessionTicketLifeTimeHint() const
如果已禁用QSsl::SslOptionDisableSessionPersistence ,则该函数返回服务器发送的会话票据有效期提示(该值可能是 0)。如果服务器未发送会话票据(例如在恢复会话时,或服务器不支持该功能时),或者QSsl::SslOptionDisableSessionPersistence 未被禁用,则该函数返回 -1。
另请参阅 sessionTicket()、QSsl::SslOptionDisableSessionPersistence 、setSslOption() 以及QSslSocket::newSessionTicketReceived()。
void QSslConfiguration::setAllowedNextProtocols(const QList<QByteArray> &protocols)
该函数用于设置允许的protocols ,以便通过TLS扩展中的“下一层协议协商”(NPN)或“应用层协议协商”(ALPN)与服务器进行协商;protocols 中的每个元素必须定义一种允许的协议。 必须在建立连接之前显式调用该函数,以便在SSL握手过程中发送NPN/ALPN扩展。可通过nextProtocolNegotiationStatus()查询协商是否成功。
另请参阅 nextNegotiatedProtocol()、nextProtocolNegotiationStatus()、allowedNextProtocols() 以及QSslConfiguration::NextProtocolHttp1_1 。
void QSslConfiguration::setBackendConfiguration(const QMap<QByteArray, QVariant> &backendConfiguration = QMap<QByteArray, QVariant>())
设置或清除后端特定配置。
如果不指定 `backendConfiguration ` 参数,此函数将清除后端特有的配置。有关支持的选项的更多信息,请参阅setBackendConfigurationOption() 的文档。
另请参阅 backendConfiguration() 和setBackendConfigurationOption()。
void QSslConfiguration::setBackendConfigurationOption(const QByteArray &name, const QVariant &value)
将后端特定配置中的name 选项设置为value 。
OpenSSL(>= 1.0.2)后端支持的选项可在“支持的配置文件命令”文档中查阅。对于所有选项,value 参数的预期类型均为QByteArray 。示例展示了如何使用其中一些选项。
注意: 后端特定配置 将在通用配置之后应用。如果使用后端特定配置再次设置某个通用配置选项,则会覆盖该通用配置选项。
另请参阅 backendConfiguration() 和setBackendConfiguration()。
void QSslConfiguration::setCaCertificates(const QList<QSslCertificate> &certificates)
将此套接字的 CA 证书数据库设置为certificates 。必须在 SSL 握手开始前设置证书数据库。套接字会在握手阶段使用该 CA 证书数据库来验证对端证书。
注意: 默认配置使用 系统 CA 证书数据库。如果该数据库不可用(如 iOS 系统中常见的情况),则默认数据库为空。
另请参阅 caCertificates()、addCaCertificates() 和addCaCertificate()。
void QSslConfiguration::setCiphers(const QList<QSslCipher> &ciphers)
将此套接字的加密密码套件设置为ciphers ,该套件必须包含supportedCiphers() 返回的列表中加密算法的一个子集。
对密码套件的限制必须在握手阶段(即选择会话密码时)之前完成。
另请参阅 ciphers() 和supportedCiphers()。
[since 6.0] void QSslConfiguration::setCiphers(const QString &ciphers)
将此配置的加密密码套件设置为ciphers ,该列表由冒号分隔,包含密码套件名称。密码套件按优先级顺序排列,优先级最高的密码套件排在最前面。ciphers 中的每个加密套件名称必须是supportedCiphers() 返回列表中的加密套件名称。限制加密套件的操作必须在握手阶段(即选择会话加密套件的阶段)之前完成。
注意:使用 Schannel 后端时,加密算法的顺序将被忽略,Schannel 会在握手过程中选择安全性最高的加密算法。
该函数在 Qt 6.0 中引入。
另请参阅 ciphers()。
[static] void QSslConfiguration::setDefaultConfiguration(const QSslConfiguration &configuration)
将新建立的 SSL 连接所使用的默认 SSL 配置设置为configuration 。现有连接不受此调用影响。
另请参阅 supportedCiphers() 和defaultConfiguration()。
[static] void QSslConfiguration::setDefaultDtlsConfiguration(const QSslConfiguration &configuration)
将新建立的 DTLS 连接所使用的默认 DTLS 配置设置为configuration 。现有连接不受此调用影响。
另请参阅 defaultDtlsConfiguration()。
void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams)
设置一组自定义的迪菲-赫尔曼参数,供该套接字在作为dhparams 服务器时使用。
如果未设置任何迪菲-赫尔曼参数,QSslConfiguration 对象将默认使用 RFC 3526 中定义的 2048 位 MODP 组。
从 6.7 版本开始,如果 TLS 后端支持,您可以提供一个空的迪菲-赫尔曼参数以使用自动选择功能(参见 OpenSSL 的 SSL_CTX_set_dh_auto)。
注意: 默认参数 在未来版本的 Qt 中可能会发生变化。请查阅您所使用具体 Qt 版本的文档,以了解该版本使用的默认值。
另请参阅 diffieHellmanParameters()。
void QSslConfiguration::setDtlsCookieVerificationEnabled(bool enable)
当enable 为true时,此函数将启用DTLS Cookie验证。
另请参阅 dtlsCookieVerificationEnabled()。
void QSslConfiguration::setEllipticCurves(const QList<QSslEllipticCurve> &curves)
将此套接字要使用的椭圆曲线列表设置为curves ,该列表必须包含supportedEllipticCurves() 返回的曲线列表中的子集。
椭圆曲线的限制必须在握手阶段(即选择会话密码的阶段)之前完成。
另请参阅 ellipticCurves 。
[since 6.0] void QSslConfiguration::setHandshakeMustInterruptOnError(bool interrupt)
如果 `interrupt ` 为真且底层后端支持此选项,则在证书验证过程中发现的错误将通过触发 `QSslSocket::handshakeInterruptedOnError()` 立即报告。这允许终止未完成的握手,并向对端发送适当的警报消息。 在此情况下,应用程序无需采取任何特殊操作。QSslSocket 将在发送警报消息后关闭连接。如果应用程序在检查错误后仍希望继续握手过程,则必须在其槽函数中调用QSslSocket::continueInterruptedHandshake()。信号-槽连接必须是直接的。
注意:当 启用中断握手时, 原本由 `QSslSocket::peerVerifyError()` 报告的错误将仅由 `QSslSocket::handshakeInterruptedOnError()` 报告。
注意:即使 握手继续进行,在发出QSslSocket::sslErrors() 信号时仍会 报告这些错误(因此必须在相应的函数槽中忽略它们)。
该函数在 Qt 6.0 中引入。
另请参阅 handshakeMustInterruptOnError()、QSslSocket::handshakeInterruptedOnError() 和QSslSocket::continueInterruptedHandshake()。
[since 6.12] void QSslConfiguration::setKeyingMaterial(const QList<QSslKeyingMaterial> &keyMaterial)
将此 SSL 连接的密钥材料配置设置为keyMaterial 。
这将启用 TLS 导出机制,允许应用程序从协商好的 TLS 会话中推导出额外的加密材料。该导出机制在 RFC 5705 和 RFC 8446 中有定义。
该配置必须在 TLS 握手开始之前设置。在已加密的连接上调用此函数将无效。
每个 `QSslKeyingMaterial ` 条目指定了导出器标签、可选的上下文值以及要推导的密钥素材的长度。握手成功后,可以从 SSL 连接中检索到请求的密钥素材。
导出的密钥材料在 TLS 会话中是唯一的,可安全地用于为需要与底层 TLS 通道进行加密绑定的应用层协议推导密钥。
注意:此 功能因后端而异,目前需要 OpenSSL 支持。
警告:应用程序 有责任定义唯一且抗碰撞的导出器标签。在不同用途间重复使用标签或上下文可能会导致难以察觉的安全漏洞。
此函数在 Qt 6.12 中引入。
另请参阅 takeKeyingMaterial()。
void QSslConfiguration::setLocalCertificate(const QSslCertificate &certificate)
将SSL握手过程中向对端出示的证书设置为certificate 。
在连接建立后设置证书将无效。
证书是 SSL 过程中用于身份识别的手段。远程端会使用本地证书,对照其证书颁发机构 (CA) 列表来验证本地用户的身份。在大多数情况下(例如 HTTP 网页浏览),只有服务器向客户端进行身份验证,因此客户端不会发送证书。
另请参阅 localCertificate()。
void QSslConfiguration::setLocalCertificateChain(const QList<QSslCertificate> &localChain)
将SSL握手过程中向对端出示的证书链设置为localChain 。
在连接建立后设置证书链将无效。
证书是 SSL 过程中用于身份验证的手段。远程端会使用本地证书,并参照其证书颁发机构 (CA) 列表来验证本地用户的身份。在大多数情况下(例如 HTTP 网页浏览),只有服务器向客户端进行身份验证,因此客户端不会发送证书。
与QSslConfiguration::setLocalCertificate() 不同,此方法允许您指定验证证书所需的任何中间证书。列表中的第一个项目必须是叶证书。
另请参阅 localCertificateChain()。
[since 6.0] void QSslConfiguration::setMissingCertificateIsFatal(bool cannotRecover)
如果 `cannotRecover ` 为真,且当前使用的验证模式为 `QSslSocket::VerifyPeer ` 或 `QSslSocket::AutoVerifyPeer `(针对客户端套接字),则缺失的对等方证书将被视为无法恢复且无法忽略的错误。在关闭连接之前,系统会向对等方发送一条适当的警告消息。
注意:仅 当 Qt 使用 OpenSSL 后端进行配置和构建时才可用。
该函数在 Qt 6.0 中引入。
另请参阅 QSslSocket::ignoreSslErrors()、QSslSocket::PeerVerifyMode 以及missingCertificateIsFatal()。
void QSslConfiguration::setOcspStaplingEnabled(bool enabled)
如果enabled 为 true,则客户端QSslSocket 在发起握手时会向其对等方发送证书状态请求。在握手过程中,QSslSocket 将验证服务器的响应。该值必须在握手开始前设置。
另请参阅 ocspStaplingEnabled()。
void QSslConfiguration::setPeerVerifyDepth(int depth)
将SSL握手阶段中需验证的对等方证书链中的证书最大数量设置为depth 。将深度设置为0表示未设置最大深度,即应验证整个证书链。
证书按签发顺序进行验证,从对端自身的证书开始,然后是其签发者的证书,依此类推。
另请参阅 peerVerifyDepth() 和setPeerVerifyMode()。
void QSslConfiguration::setPeerVerifyMode(QSslSocket::PeerVerifyMode mode)
将验证模式设置为mode 。该模式决定QSslSocket 是否应向对等方请求证书(即客户端向服务器请求证书,或服务器向客户端请求证书),以及是否应要求该证书有效。
默认模式为 AutoVerifyPeer,该模式指示QSslSocket 对客户端使用 VerifyPeer,对服务器使用 QueryPeer。
另请参阅 peerVerifyMode()。
void QSslConfiguration::setPreSharedKeyIdentityHint(const QByteArray &hint)
将预共享密钥身份验证的身份提示设置为hint 。这将影响下次发起的握手;在已加密的套接字上调用此函数不会影响该套接字的身份提示。
身份提示仅在 `QSslSocket::SslServerMode ` 中使用!
另请参阅 preSharedKeyIdentityHint()。
void QSslConfiguration::setPrivateKey(const QSslKey &key)
将连接的私钥key 设置为key 。当客户端和服务器需要向 SSL 对等方证明其身份时,会使用该私钥和本地证书certificate 。
若要创建 SSL 服务器套接字,则必须同时提供密钥和本地证书。若要创建 SSL 客户端套接字,且客户端必须向 SSL 服务器证明其身份,则也必须提供密钥和本地证书。
另请参阅 privateKey() 和setLocalCertificate()。
void QSslConfiguration::setProtocol(QSsl::SslProtocol protocol)
将此配置的协议设置设为protocol 。
在连接已建立后设置协议将无效。
另请参阅 protocol()。
void QSslConfiguration::setSessionTicket(const QByteArray &sessionTicket)
设置用于 SSL 握手会话的会话凭证。要使此功能生效,必须关闭QSsl::SslOptionDisableSessionPersistence 选项,且sessionTicket 必须采用 ASN.1 格式,该格式由sessionTicket() 函数返回。
另请参阅 sessionTicket()、QSsl::SslOptionDisableSessionPersistence 、setSslOption() 以及QSslSocket::newSessionTicketReceived()。
void QSslConfiguration::setSslOption(QSsl::SslOption option, bool on)
启用或禁用 SSL 兼容性option 。如果on 为 true,则option 被启用。如果on 为 false,则option 被禁用。
另请参阅 testSslOption()。
[static] QList<QSslCipher> QSslConfiguration::supportedCiphers()
返回该系统支持的加密算法列表。该列表由系统的 SSL 库设定,不同系统之间可能有所不同。
另请参阅 ciphers() 和setCiphers()。
[static] QList<QSslEllipticCurve> QSslConfiguration::supportedEllipticCurves()
返回该系统支持的椭圆曲线列表。该列表由系统的 SSL 库设定,不同系统之间可能有所不同。
另请参阅 ellipticCurves() 和setEllipticCurves()。
[noexcept] void QSslConfiguration::swap(QSslConfiguration &other)
将此 SSL 配置实例与other 互换。此操作速度极快,且绝不会失败。
[static] QList<QSslCertificate> QSslConfiguration::systemCaCertificates()
该函数提供由操作系统提供的CA证书数据库。该函数返回的CA证书数据库用于初始化caCertificates()函数在默认QSslConfiguration 上返回的数据库。
另请参阅 caCertificates()、setCaCertificates()、defaultConfiguration()、addCaCertificate() 以及addCaCertificates()。
[since 6.12] QList<QSslKeyingMaterial> QSslConfiguration::takeKeyingMaterial()
返回此 SSL 连接的密钥材料配置。
密钥素材允许应用程序利用 RFC 5705 和 RFC 8446 中定义的 TLS 导出器机制,从已建立的 TLS 会话中派生出额外的加密素材。
返回列表中的每个条目描述了一个对导出密钥材料的请求,包括导出器标签、可选上下文以及所需导出数据的长度。只有在握手成功后,实际的密钥材料才可获得。
导出的密钥材料与特定的 TLS 会话绑定,并在加密上独立于用于加密的会话密钥。它可用于特定于应用程序的目的,例如通道绑定或基于 TLS 构建的协议的密钥推导。
如果未设置密钥材料配置,该函数将返回一个空列表。
这些值是通过传递而非共享的方式传递的:此配置中残留的条目是无值的clones ,因此仍可用于再次请求相同的密钥材料。只有返回的条目才包含派生的值。
注意: 密钥材料的可用性 取决于 TLS 后端。目前,仅在使用 OpenSSL 时才支持此功能。
警告: 必须谨慎处理导出的 密钥材料。不当使用可能会危及 TLS 会话或更高层协议的安全性。
该函数在 Qt 6.12 中引入。
另请参阅 setKeyingMaterial()。
[since 6.12] std::optional<QSslKeyingMaterial> QSslConfiguration::takeKeyingMaterial(const QSslKeyingMaterial &material)
返回针对给定material 请求生成的派生密钥材料。
返回密钥材料列表中按标签、上下文和请求大小与material 匹配的条目;若未找到匹配条目,则返回std::nullopt 。
如果找到了匹配的条目且 TLS 握手已成功完成,则返回对象的QSslKeyingMaterial::value() 方法中包含派生的密钥材料。
该值只能被获取一次:剩下的条目是一个无值的clone ,但它仍然与material 匹配。
该函数在 Qt 6.12 中引入。
另请参阅 takeKeyingMaterial() 和setKeyingMaterial()。
bool QSslConfiguration::testSslOption(QSsl::SslOption option) const
如果启用了指定的 SSL 兼容性option ,则返回true 。
另请参阅 setSslOption()。
bool QSslConfiguration::operator!=(const QSslConfiguration &other) const
如果该QSslConfiguration 与other 不一致,则返回true 。只要任何状态或设置存在差异,两个QSslConfiguration 对象即被视为不同。
另请参阅 operator==()。
QSslConfiguration &QSslConfiguration::operator=(const QSslConfiguration &other)
复制other 的配置和状态。如果other 为null,则该对象也将为null。
bool QSslConfiguration::operator==(const QSslConfiguration &other) const
如果该QSslConfiguration 对象与other 相等,则返回true 。
如果两个QSslConfiguration 对象的设置和状态完全相同,则被视为相等。
另请参阅 operator!=()。
© 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.