Redis 6.0 及以上版本原生支持 TLS 加密传输,通过修改服务端配置并生成证书可防止数据窃听。适用于生产环境敏感数据传输,需确保客户端同步启用 TLS 连接。
先说结论:Redis 6.0+ 版本可直接在配置文件启用 TLS,客户端需使用 rediss 协议或 tls 参数连接。
- 适合:Redis 6.0 及以上版本,生产环境敏感数据
- 先准备:生成 CA 证书、服务端证书和私钥
- 验收:客户端使用 `--tls` 参数连接成功且流量加密
命令速用版
服务端配置修改 redis.conf 并重启,客户端连接添加 tls 参数即可生效。
# 服务端 redis.conf 关键配置
tls-port 6379
port 0
tls-cert-file /etc/redis/certs/redis.crt
tls-key-file /etc/redis/certs/redis.key
tls-ca-cert-file /etc/redis/certs/ca.crt
# 客户端连接命令
redis-cli -h host -p 6379 `--tls` `--cacert` /etc/redis/certs/ca.crt为什么会这样
Redis 默认协议是明文传输,同一网络内的抓包工具可直接读取缓存内容。TLS 协议通过加密通道、身份认证和完整性校验,防止数据在传输过程中被窃听或篡改。Redis 6.0 之前版本不支持原生 TLS,需通过 stunnel 等代理实现,6.0 之后内置支持可减少网络跳数和进程开销。
分步处理
按顺序完成版本确认、证书生成、服务端配置和客户端适配,每步完成后需检查状态。
1. 确认 Redis 版本
执行 redis-server `--version` 确认版本号大于等于 6.0,旧版本需升级或重新编译启用 OpenSSL 支持。编译时需添加 BUILD_TLS=yes 参数。
2. 生成 TLS 证书
使用 OpenSSL 生成 CA 根证书、服务端证书和私钥,文件权限需设置为 600 并归属 redis 用户。
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
openssl genrsa -out redis.key 2048
openssl req -new -key redis.key -out redis.csr
openssl x509 -req -in redis.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out redis.crt -days 365 -sha2563. 配置服务端
编辑 redis.conf 文件,指定证书路径并启用 tls-port,生产环境建议关闭明文 port 端口。
tls-port 6379
port 0
tls-cert-file /etc/redis/certs/redis.crt
tls-key-file /etc/redis/certs/redis.key
tls-ca-cert-file /etc/redis/certs/ca.crt
tls-auth-clients no4. 配置客户端
应用代码或连接工具需启用 TLS 选项,URI 协议头使用 rediss://,或配置 TLSConfig 对象加载 CA 证书。
怎么验证是否生效
使用支持 TLS 的客户端连接并检查网络流量,确认无明文数据泄露。
- 连接测试:执行 redis-cli `--tls` ping 返回 PONG 表示连接成功
- 流量检查:使用 tcpdump 抓包确认 payload 为加密密文而非明文命令
- 日志检查:查看 Redis 服务端日志无 TLS 握手失败报错
常见坑
配置过程中容易忽略版本限制、集群特殊参数和证书权限问题。
- 版本不足:Redis 6.0 以下版本不支持原生 TLS,强行配置会导致启动失败
- 集群配置:Redis 集群需额外设置 tls-cluster yes 和 tls-replication yes,否则节点间通信仍为明文
- 证书权限:私钥文件权限需为 600,属主为 redis,否则服务端拒绝加载
- 端口混淆:启用 tls-port 后,客户端连接需指定 TLS 端口,原 port 端口若未关闭仍可明文连接
常见问题
Redis 多少版本支持 TLS?
Redis 6.0 及以上版本原生支持 TLS 加密传输,之前版本仅支持明文。
客户端代码如何配置 TLS?
不同语言客户端配置不同,Go 语言需设置 TLSConfig,Node.js ioredis 需添加 tls 选项,URI 协议使用 rediss://。
开启 TLS 会影响性能吗?
公开资料中没有看到可靠的量化数据,但原生 TLS 比反向代理方案减少网络跳转,开销相对可控。
参考来源
- Redis 启用 TLS 加密传输配置
- Redis 6.0+ TLS 加密实战:从证书生成到客户端连接的完整指南
- Redis 集群环境如何开启 TLS 加密_配置 SSL 证书确保数据传输过程安全
- Redis 数据库如何配置 TLS 详解 - 墨天轮
- TLS 加密 - Redis 传输协议 RESP 支持说明