安全套接字层 (SSL) 类
下面的类支持使用安全套接字层(SSL)协议的安全网络通信,使用本地 TLS 后端、OpenSSL 工具包或任何适当的 TLS 插件来执行加密和协议处理。
从 Qt 版本 5.15 开始,官方支持的 OpenSSL 版本为 1.1.1 或更高版本。
Qt 5.15.1 及以后的版本也兼容 OpenSSL 3。
该类为 UDP 套接字提供加密功能 | |
该类实现服务器端 DTLS cookie 生成和验证 | |
该类定义了 DTLS cookie 生成器的参数 | |
该类表示在线证书状态协议响应 | |
声明所有 SSL 类共有的枚举。Qt Network | |
X509 证书的便捷 API | |
访问 X509 证书扩展的 API | |
代表 SSL 加密密码 | |
保存 SSL 连接的配置和状态 | |
服务器 Diffie-Hellman 参数接口 | |
代表用于椭圆曲线密码算法的椭圆曲线 | |
SSL 错误 | |
私钥和公钥接口 | |
预共享密钥 (PSK) 密码套件的验证数据 | |
通过 TLS 实现加密的安全 TCP 服务器 | |
为客户端和服务器提供 SSL 加密套接字 | |
描述警报信息的级别 | |
列举警报信息可能包含的代码 | |
描述 DTLS 握手的当前状态 | |
列举 TLS 后端实现的类 | |
描述 QDtls 和 QDtlsClientVerifier 可以发现的错误 | |
描述在线证书状态 | |
描述证书撤销的原因 | |
列举 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.