TLS

Redis TLS 支持

从版本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 集群测试。

手动运行

要手动以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-fileca-cert-dir指定的受信任根CA进行验证)。

您可以使用tls-auth-clients no来禁用客户端认证。

复制

Redis主服务器以相同的方式处理连接的客户端和副本服务器,因此上述tls-porttls-auth-clients指令也适用于复制链接。

在副本服务器端,需要指定tls-replication yes以使用TLS与主服务器建立出站连接。

集群

当使用Redis集群时,使用tls-cluster yes以启用集群总线和跨节点连接的TLS。

哨兵

Sentinel 继承了其网络配置来自常见的 Redis 配置,因此上述所有内容同样适用于 Sentinel。

当连接到主服务器时,Sentinel 将使用 tls-replication 指令来确定是否需要 TLS 或非 TLS 连接。

此外,相同的tls-replication指令将决定Sentinel的端口(接受来自其他Sentinel的连接)是否也支持TLS。也就是说,只有在启用tls-replication时,Sentinel才会配置tls-port

额外配置

额外的TLS配置可用于控制TLS协议版本、密码和密码套件等的选择。请查阅自文档化的redis.conf以获取更多信息。

性能考虑

TLS 在通信栈中增加了一层,由于从/向 SSL 连接进行读写、加密/解密和完整性检查,会产生开销。因此,使用 TLS 会导致每个 Redis 实例可实现的吞吐量下降(更多信息请参阅此讨论)。

限制

目前不支持使用TLS的I/O线程。

RATE THIS PAGE
Back to top ↑