原文:https://redis.io/topics/encryption
翻译:Wen Hui
转载:中间件小哥
Redis从版本6开始支持SSL / TLS,这是一项可选功能,需要在编译时启用。
编译
要使用TLS支持进行构建,你需要OpenSSL开发库(例如Debian / Ubuntu上的libssl-dev)。
运行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 params文件。例如:
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连接。这是侦听TCP连接的额外端口,因此可以同时使用TLS和非TLS连接访问不同端口上的Redis实例。
您可以指定端口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。
Sentinel(哨兵)模式
Sentinel从通用Redis配置继承其网络配置,因此上述所有内容同样适用于Sentinel。
连接到主服务器时,Sentinel将使用tls-replication指令来确定是否需要TLS或非TLS连接。
附加配置
可以使用其他TLS配置来控制TLS协议版本,密码和密码套件等的选择。有关更多信息,请查阅带备注的redis.conf。
局限性
TLS当前不支持I / O多线程。