安全套接层(SSL)类#
网络套接字安全通信的类。
以下类为使用安全套接层(SSL)协议进行安全网络通信提供了支持,使用原生 TLS 后端、OpenSSL 工具包 或任何适当的 TLS 插件进行加密和协议处理。
从 Qt 5.15 版本开始,官方支持的 OpenSSL 版本为 1.1.1 或更高版本。
从 Qt 5.15.1 版本开始,也兼容 OpenSSL 3。
此类实现服务器端 DTLS 饼干生成和验证。
QDtlsClientVerifier.GeneratorParameters
此类定义了 DTLS 饼干生成器的参数。
QDtls.QDtlsError
描述了 QDtls 和 QDtlsClientVerifier 可以找到的错误。
此类为 UDP 套接字提供加密。
QDtls.HandshakeState
描述了 DTLS 握手的当前状态。
此类表示在线证书状态协议(OCSP)响应。
QOcspResponse.QOcspCertificateStatus
描述在线证书状态。
QOcspResponse.QOcspRevocationReason
描述吊销的原因。
QSsl 命名空间声明了 Qt 网络中所有 SSL 类通用的枚举。
QSslSocket.AlertLevel
描述了警报消息的级别。
QSslSocket.AlertType
列举了警报消息可能具有的可能代码。
QSslSocket.ImplementedClass
列举了 TLS 后端实现的类。
QSslSocket.SupportedFeature
列举了 TLS 后端支持的可能的特征。
QSslCertificate 类提供了一个方便的 API 用于 X509 证书。
QSslCertificateExtension 类提供了一个用于访问 X509 证书扩展的 API。
QSslCipher 类表示 SSL 加密密钥。
QSslConfiguration 类保持 SSL 连接的配置和状态。
QSslDiffieHellmanParameters 类提供了服务器端 Diffie-Hellman 参数的接口。
代表椭圆曲线,用于椭圆曲线加密算法。
QSslError 类提供了一个 SSL 错误。
QSslKey 类提供了一个用于私钥和公钥的接口。
QSslPreSharedKeyAuthenticator 类提供了预共享密钥(PSK)加密套件的身份验证数据。
实现加密、安全的 TLS TCP 服务器。
QSslSocket 类为客户端和服务器提供 SSL 加密的套接字。
有关 Android 应用程序,请参阅为 Android 添加 OpenSSL 支持。
从源代码构建 Qt 时启用和禁用 SSL 支持#
在从源代码构建Qt时,Qt会为原生TLS库构建插件,该库支持您正在构建的目标操作系统。对于Windows来说,这意味着Schannel,而对于macOS来说,则是Secure Transport。
在所有平台上,配置系统都会检查是否有OpenSSL提供的由源代码或开发包提供的openssl/opensslv.h
头文件。如果找到,则将启用并构建Qt的OpenSSL后端。
默认情况下,启用了OpenSSL的Qt库将在运行时动态加载任何已安装的OpenSSL库。然而,可以通过将Qt配置为带有-openssl-linked
选项来在编译时链接到库。
当构建链接到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)协议。QtNetwork使得可以使用DTLS与用户数据报协议(UDP)结合,如RFC 6347所定义。
导入和导出限制#
Qt的二进制安装程序包括由QtNetwork
使用的OpenSSL库。然而,这些库并不是自动部署到使用Qt构建的应用程序中。对于一些类型的应用软件和世界上的某些地区,适用进口和出口限制。希望在自己的部署应用程序中使用SSL通信的开发人员应确保其用户已安装了适当的库,或者他们应该咨询一名合适的法律专业人士,以确保使用OpenSSL项目代码的应用程序可以正确地获得世界相关地区的进出口认证。