如何开启 Redis TLS 加密传输防止数据被窃听

文章导读
Redis 6.0 及以上版本原生支持 TLS 加密传输,通过修改服务端配置并生成证书可防止数据窃听。适用于生产环境敏感数据传输,需确保客户端同步启用 TLS 连接。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

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 之后内置支持可减少网络跳数和进程开销。

如何开启 Redis TLS 加密传输防止数据被窃听

分步处理

按顺序完成版本确认、证书生成、服务端配置和客户端适配,每步完成后需检查状态。

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 -sha256

3. 配置服务端

编辑 redis.conf 文件,指定证书路径并启用 tls-port,生产环境建议关闭明文 port 端口。

如何开启 Redis TLS 加密传输防止数据被窃听
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 no

4. 配置客户端

应用代码或连接工具需启用 TLS 选项,URI 协议头使用 rediss://,或配置 TLSConfig 对象加载 CA 证书。

怎么验证是否生效

使用支持 TLS 的客户端连接并检查网络流量,确认无明文数据泄露。

  • 连接测试:执行 redis-cli `--tls` ping 返回 PONG 表示连接成功
  • 流量检查:使用 tcpdump 抓包确认 payload 为加密密文而非明文命令
  • 日志检查:查看 Redis 服务端日志无 TLS 握手失败报错

常见坑

配置过程中容易忽略版本限制、集群特殊参数和证书权限问题。

如何开启 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 支持说明