TLS
Redis TLS 支持
Redis 从 6.0 版本开始支持 SSL/TLS,这是一项可选功能,需要在编译时启用。
入门
构建
要使用 TLS 支持构建,您需要 OpenSSL 开发库(例如,在 Debian/Ubuntu 上为 libssl-dev
)。
使用以下命令构建 Redis
make BUILD_TLS=yes
测试
要使用 TLS 运行 Redis 测试套件,您需要对 TCL 的 TLS 支持(例如,在 Debian/Ubuntu 上为 tcl-tls
软件包)。
-
运行
./utils/gen-test-certs.sh
生成根 CA 和服务器证书。 -
运行
./runtest --tls
或./runtest-cluster --tls
以在 TLS 模式下运行 Redis 和 Redis 集群测试。
手动运行
要手动运行使用 TLS 模式的 Redis 服务器(假设已调用 gen-test-certs.sh
,以便示例证书/密钥可用)
./src/redis-server --tls-port 6379 --port 0 \
--tls-cert-file ./tests/tls/redis.crt \
--tls-key-file ./tests/tls/redis.key \
--tls-ca-cert-file ./tests/tls/ca.crt
要使用 redis-cli
连接到此 Redis 服务器
./src/redis-cli --tls \
--cert ./tests/tls/redis.crt \
--key ./tests/tls/redis.key \
--cacert ./tests/tls/ca.crt
证书配置
为了支持 TLS,Redis 必须配置 X.509 证书和私钥。此外,还需要指定 CA 证书捆绑文件或路径,作为验证证书时可信根的依据。为了支持基于 DH 的密码,还可以配置 DH 参数文件。例如
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
tls-ca-cert-file /path/to/ca.crt
tls-dh-params-file /path/to/redis.dh
TLS 监听端口
tls-port
配置指令允许在指定端口上接受 SSL/TLS 连接。这是**除了**在 port
上监听 TCP 连接之外的,因此可以使用 TLS 和非 TLS 连接同时访问 Redis 的不同端口。
可以指定 port 0
来完全禁用非 TLS 端口。要仅在默认 Redis 端口上启用 TLS,请使用
port 0
tls-port 6379
客户端证书认证
默认情况下,Redis 使用双向 TLS 并且要求客户端使用有效证书进行身份验证(针对 ca-cert-file
或 ca-cert-dir
指定的受信任根 CA 进行身份验证)。
可以使用 tls-auth-clients no
来禁用客户端身份验证。
复制
Redis 主服务器以相同的方式处理连接的客户端和副本服务器,因此上述 tls-port
和 tls-auth-clients
指令也适用于复制链接。
在副本服务器端,需要指定 tls-replication yes
以对与主服务器的出站连接使用 TLS。
集群
当使用 Redis 集群时,使用 tls-cluster yes
来启用集群总线和跨节点连接的 TLS。
哨兵
哨兵从公共 Redis 配置继承其网络配置,因此上述所有内容也适用于哨兵。
当连接到主服务器时,哨兵将使用 tls-replication
指令来确定需要 TLS 或非 TLS 连接。
此外,相同的 tls-replication
指令将确定哨兵的端口(接受来自其他哨兵的连接)是否也支持 TLS。也就是说,只有在启用 tls-replication
的情况下,哨兵才会使用 tls-port
进行配置。
其他配置
可以使用其他 TLS 配置来控制 TLS 协议版本、密码和密码套件等的选择。有关更多信息,请参阅自文档化的 redis.conf
。
性能考虑因素
TLS 在通信堆栈中添加了一层,由于写入/读取 SSL 连接、加密/解密和完整性检查,会产生开销。因此,使用 TLS 会导致每个 Redis 实例的吞吐量降低(有关更多信息,请参阅此 讨论)。
限制
目前不支持 TLS 的 I/O 线程。