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 包)。

  1. 运行 ./utils/gen-test-certs.sh 生成根 CA 和服务器证书。

  2. 运行 ./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-fileca-cert-dir 指定的信任根 CA 进行验证)。

您可以使用 tls-auth-clients no 禁用客户端身份验证。

复制

Redis 主服务器处理连接的客户端和副本服务器的方式相同,因此上述 tls-porttls-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 线程。

评价此页面
返回顶部 ↑