TLS/SSL
内容
TLS/SSL¶
Dask 分布式支持 TLS/SSL 通信,提供集群端点(客户端、调度器和工作者)之间的相互认证和通信加密。
通过使用 tls 地址(如 tls://,默认是 tcp,发送未认证和未加密的数据)启用 TLS。在 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)[源代码]¶
Dask 集群的安全配置。
默认值从 Dask 的配置文件中加载,并且可以在构造函数中被覆盖。
- 参数
- require_encryptionbool, 可选
是否要求所有连接使用TLS加密。
- tls_ca_filestr, 可选
指向以 PEM 格式编码的 CA 证书文件的路径。
- 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_args映射,可选
使用关键字参数映射传递给连接。