TLS/SSL
目录
TLS/SSL¶
Dask distributed 支持 TLS/SSL 通信,提供集群端点(客户端、调度器和工作节点)之间的相互认证和通信加密。
通过使用诸如 tls://
的 tls
地址来启用 TLS(默认是 tcp
,它发送未认证和未加密的数据)。在 TLS 模式下,所有集群端点必须出示由指定证书颁发机构(CA)签发的有效 TLS 证书。通常建议为您的组织使用自定义 CA,因为这将允许为内部主机名或 IP 地址签发证书。
参数¶
使用 TLS 时,必须提供附加参数
一个 CA 证书文件,它允许 TLS 决定端点的证书是否由正确的机构签发;
每个端点的 证书文件,用于向其他端点出示以实现相互认证;
一个 私钥文件,这是向其他端点证明您是给定证书的授权用户的加密手段。
注意
根据 OpenSSL 的要求,所有这些文件都应采用 PEM 格式。另外,可以将证书和私钥合并到一个文件中(此时只需指定 certificate 参数,而省略 private key 参数)。
您可以选择每个端点使用不同的证书和私钥,或者所有端点共享相同的证书和私钥,或者每种类型的端点(客户端、调度器、工作节点)拥有自己的证书/密钥对。然而,除非您有特殊需求,否则 CA 证书对于所有端点应该都是相同的。
还可以传递其他参数
一组允许的 加密套件,如果您对哪些算法被认为是安全的有严格要求;此设置的值应是一个 OpenSSL 加密套件字符串;
支持的 最低 和/或 最高 TLS 版本。出于安全考虑,distributed 仅支持 TLS 版本 >= 1.2。
是否 要求加密,以避免误用纯 TCP 通信。
所有这些参数可以通过几种方式传递
通过 Dask 配置文件;
如果使用命令行,通过
dask scheduler
和dask worker
的选项;如果使用 API,通过一个
Security
对象。例如,以下是如何为客户端使用配置Security
对象:from distributed import Client from distributed.security import Security sec = Security(tls_ca_file='cluster_ca.pem', tls_client_cert='cli_cert.pem', tls_client_key='cli_key.pem', require_encryption=True) client = Client(..., security=sec)
安全策略¶
Dask 始终根据配置的 CA 证书验证远程端点出示的证书。证书会针对“客户端”和“服务器”端点(在 TCP 意义上)进行验证,以确保端点相互认证。证书颁发的主机名或 IP 地址不会被检查;如果您使用自己的内部证书颁发机构,这应该不成问题。
无法禁用证书验证,因为这将使通信容易受到中间人攻击。
性能影响¶
在最新的 CPU 上,加密速度很快,其中大多数 CPU 都具有基于 AES 的硬件加速。除非您强制 ciphers 参数为其他值,否则 TLS 层通常会选择 AES。然而,如果您通过高速网络链接传输非常大的数据,加密仍然可能产生不可忽略的开销。
另请参阅
一项关于 AES-NI 加速的研究 表明,最新的 x86 CPU 可以在每个 CPU 核心上以超过每秒 1 GB 的速度进行 AES 加密。
API¶
- class distributed.security.Security(require_encryption=None, **kwargs)[source]¶
Dask 集群的安全配置。
默认值从 Dask 的配置文件加载,并可以在构造函数中覆盖。
- 参数
- require_encryptionbool, 可选
是否对所有连接要求 TLS 加密。
- tls_ca_filestr, 可选
CA 证书文件的路径,采用 PEM 格式编码。
- tls_ciphersstr, 可选
允许的 OpenSSL 加密套件字符串。如果未提供,将使用系统默认值。
- tls_min_versionssl.TLSVersion, 可选
支持的最低 TLS 版本。默认为 TLS 1.2。
- tls_max_versionssl.TLSVersion, 可选
支持的最高 TLS 版本。默认为支持的最高版本。
- tls_client_certstr, 可选
客户端证书文件的路径,采用 PEM 格式编码。
- tls_client_keystr, 可选
客户端密钥文件的路径,采用 PEM 格式编码。或者,密钥可以附加到证书文件中,此时可以省略此参数。
- tls_scheduler_certstr, 可选
调度器证书文件的路径,采用 PEM 格式编码。
- tls_scheduler_keystr, 可选
调度器密钥文件的路径,采用 PEM 格式编码。或者,密钥可以附加到证书文件中,此时可以省略此参数。
- tls_worker_certstr, 可选
工作节点证书文件的路径,采用 PEM 格式编码。
- tls_worker_keystr, 可选
工作节点密钥文件的路径,采用 PEM 格式编码。或者,密钥可以附加到证书文件中,此时可以省略此参数。
- extra_conn_argsmapping, 可选
包含要传递给连接的关键字参数的映射。