安全套接字层 (SSL) 类

下面的类支持使用安全套接字层(SSL)协议的安全网络通信,使用本地 TLS 后端、OpenSSL 工具包或任何适当的 TLS 插件来执行加密和协议处理。

从 Qt 版本 5.15 开始,官方支持的 OpenSSL 版本为 1.1.1 或更高版本。

Qt 5.15.1 及以后的版本也兼容 OpenSSL 3。

QDtls

该类为 UDP 套接字提供加密功能

QDtlsClientVerifier

该类实现服务器端 DTLS cookie 生成和验证

QDtlsClientVerifier::GeneratorParameters

该类定义了 DTLS cookie 生成器的参数

QOcspResponse

该类表示在线证书状态协议响应

QSsl

声明所有 SSL 类共有的枚举。Qt Network

QSslCertificate

X509 证书的便捷 API

QSslCertificateExtension

访问 X509 证书扩展的 API

QSslCipher

代表 SSL 加密密码

QSslConfiguration

保存 SSL 连接的配置和状态

QSslDiffieHellmanParameters

服务器 Diffie-Hellman 参数接口

QSslEllipticCurve

代表用于椭圆曲线密码算法的椭圆曲线

QSslError

SSL 错误

QSslKey

私钥和公钥接口

QSslPreSharedKeyAuthenticator

预共享密钥 (PSK) 密码套件的验证数据

QSslServer

通过 TLS 实现加密的安全 TCP 服务器

QSslSocket

为客户端和服务器提供 SSL 加密套接字

QSslSocket::AlertLevel

描述警报信息的级别

QSslSocket::AlertType

列举警报信息可能包含的代码

QDtls::HandshakeState

描述 DTLS 握手的当前状态

QSslSocket::ImplementedClass

列举 TLS 后端实现的类

QDtls::QDtlsError

描述 QDtls 和 QDtlsClientVerifier 可以发现的错误

QOcspResponse::QOcspCertificateStatus

描述在线证书状态

QOcspResponse::QOcspRevocationReason

描述证书撤销的原因

QSslSocket::SupportedFeature

列举 TLS 后端可能支持的功能

对于 Android 应用程序,请参阅为 Android 添加 OpenSSL 支持

从源代码构建 Qt 时启用和禁用 SSL 支持

从源代码构建 Qt 时,Qt 会为您所构建的操作系统支持的本地 TLS 库构建插件。对于 Windows,这意味着Schannel,而对于 macOS,这意味着Secure Transport

在所有平台上,配置系统都会检查是否存在由 OpenSSL 源代码或开发者软件包提供的openssl/opensslv.h 头文件。如果发现,它将启用并为 Qt 构建 OpenSSL 后端。

默认情况下,启用 OpenSSL 的 Qt 库会在运行时动态加载任何已安装的 OpenSSL 库。不过,也可以通过使用-openssl-linked 选项配置 Qt,在编译时针对该库进行链接。

在构建与 OpenSSL 链接的 Qt 版本时,Qt 的构建系统将使用 CMake 的FindOpenSSL 命令在几个标准位置查找 OpenSSL。您可以设置 CMake 变量 OPENSSL_ROOT_DIR,强制指定一个特定位置。

例如

configure -openssl-linked -- -D OPENSSL_ROOT_DIR=<openssl_dir>

要在 Qt 编译中禁用 SSL 支持,请使用-no-openssl 选项配置 Qt。

打包应用程序时的注意事项

打包应用程序时,可以运行windeployqt 这样的工具。它会将使用的库的所有插件复制到plugins/ 文件夹。不过,对于 TLS 而言,你只需要一个后端,因此可以在打包应用程序之前删除其他插件。例如,如果您使用的是 Windows 系统,并且不需要 OpenSSL 后端提供的任何额外功能,您可以选择放弃发送qopensslbackend 插件以及 OpenSSL 库,而只发送qschannelbackend 插件。

不过,发布多个后端并不是问题。Qt 将尝试按顺序加载后端(首先尝试加载 OpenSSL),直到成功加载一个后端为止。其他后端将不会被使用。

数据报传输层安全

数据报传输层安全(DTLS)是一种协议,可确保基于数据报的应用程序的安全性,为其提供防止窃听、篡改或伪造消息的保护。DTLS 协议以面向流的传输层安全(TLS)协议为基础。根据RFC 6347 的定义,QtNetwork 允许在用户数据报协议(UDP)中使用 DTLS。

导入和导出限制

Qt 二进制安装程序包括QtNetwork 使用的 OpenSSL 库。不过,这些库不会自动与使用 Qt 构建的应用程序一起部署。某些类型的软件和世界上某些地区有进出口限制。希望在其部署的应用程序中使用 SSL 通信的开发人员应确保其用户已安装了相应的库,或者应咨询具有相应资质的法律专业人士,以确保使用 OpenSSL 项目代码的应用程序已在世界相关地区获得正确的进出口认证。

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