TLS
Redis TLS 支持
Redis Open Source |
---|
从版本 6 开始,Redis 支持 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 Cluster 测试。
手动运行
手动运行 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,必须使用 X.509 证书和私钥配置 Redis。此外,需要指定一个 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 Cluster 时,使用 tls-cluster yes
以便为集群总线和节点间连接启用 TLS。
Sentinel
Sentinel 继承了公共 Redis 配置中的网络配置,因此以上所有内容也适用于 Sentinel。
连接到主服务器时,Sentinel 将使用 tls-replication
指令来确定是否需要 TLS 或非 TLS 连接。
此外,相同的 tls-replication
指令将决定 Sentinel 接受其他 Sentinel 连接的端口是否也支持 TLS。也就是说,仅当启用了 tls-replication
时,才会使用 tls-port
配置 Sentinel。
附加配置
可以使用附加的 TLS 配置来控制 TLS 协议版本、密码和密码套件等选择。更多信息请查阅自文档化的 redis.conf
。
性能注意事项
TLS 在通信堆栈中增加了一层,由于对 SSL 连接的写入/读取、加密/解密和完整性检查而产生开销。因此,使用 TLS 会导致每个 Redis 实例的可达到吞吐量下降(更多信息请参阅此讨论)。
限制
从版本 8.0 开始,Redis 支持 TLS 的 I/O 线程。