Redis TLS 加密连接是什么
Redis 6.0 起原生支持 TLS:服务端配置 tls-port 监听加密端口,配合证书、私钥与 CA 文件;客户端连接时用 --tls 并指定 CA。迁移过程中最常见的问题不是业务连接,而是复制链路与哨兵/集群监控还在用明文端口——只要链路两端配置不齐,复制就建不起来。
基本信息
| 适用版本 | Redis 6.0+,需编译或发行版包含 TLS 支持 |
|---|---|
| 服务端参数 | tls-port、tls-cert-file、tls-key-file、tls-ca-cert-file |
| 双向认证 | tls-auth-clients yes(默认启用客户端证书校验) |
| 客户端连接 | redis-cli --tls --cacert <ca> -p <tls-port> |
| 链路要求 | 复制、哨兵、集群总线均需各自的 TLS 配置 |
| 证书管理 | 有效期监控与轮换流程必须预先规划 |
典型使用场景
- 合规要求:数据链路必须加密,禁止明文传输
- 跨机房或跨云访问:经不可信网络时降低泄露风险
- 多租户环境:为不同业务方提供独立证书与权限
- 客户端证书认证:把连接身份校验从密码扩展到证书
- 逐步迁移:明文端口与 TLS 端口并存,分批切换客户端
服务端配置
服务端配置
# 监听 TLS 端口,明文端口按需保留或关闭
tls-port 6380
port 0
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt
tls-auth-clients yes # 要求客户端提供证书(双向认证)
tls-protocols "TLSv1.2 TLSv1.3"客户端与复制链路配置
客户端与复制链路配置
# 客户端连接验证
redis-cli --tls --cacert /etc/redis/tls/ca.crt -p 6380 PING
# 带客户端证书(双向认证时)
redis-cli --tls --cacert /etc/redis/tls/ca.crt \
--cert /etc/redis/tls/client.crt --key /etc/redis/tls/client.key -p 6380 PING
# 复制链路同样要加 TLS:在从库执行
# REPLICAOF 之前先在配置中声明 tls-replication yes,并配置 tls-cert-file / tls-key-file / tls-ca-cert-file要点对照
| 项 | 做法 | 注意 |
|---|---|---|
| 服务端监听 | tls-port + 证书三件套 | 证书链要与 CA 匹配,否则客户端校验失败 |
| 客户端认证 | tls-auth-clients yes/no | 关闭则不校验客户端证书,单向加密 |
| 复制链路 | tls-replication yes + 证书参数 | 从库也要配置,否则复制建不起来 |
| 证书轮换 | 提前生成新证书并分批替换 | 过期当天会导致全链路互信中断 |
| 性能 | 复用连接、启用会话复用 | TLS 握手有开销,短连接场景更明显 |
迁移常见坑是「只改了客户端与服务端的连接地址」:复制、哨兵监控、集群总线各有一套自己的 TLS 开关,必须成套配置并逐一验证,否则会出现业务能连、复制不通的割裂状态。
证书有效期必须纳入监控:过期当天所有节点互信同时中断,表现为大面积连接失败与复制中断,且恢复要等到证书替换完成;建议提前一个月预警并演练轮换流程。