怎么开启 Redis 消息队列传输加密 SSL 连接配置?

文章导读
开启 Redis SSL 加密的核心是在服务端启用 TLS 端口并配置证书,随后客户端连接时指定 SSL 参数。无论 Redis 是用于缓存还是作为消息队列(如 Streams/List 模式),加密配置均一致。这适合公网访问或对数据安全有合规要求的场景,内网可信环境通常不需要。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

开启 Redis SSL 加密的核心是在服务端启用 TLS 端口并配置证书,随后客户端连接时指定 SSL 参数。无论 Redis 是用于缓存还是作为消息队列(如 Streams/List 模式),加密配置均一致。这适合公网访问或对数据安全有合规要求的场景,内网可信环境通常不需要。

先说结论:服务端必须先生成证书并开启 TLS 端口,客户端连接时需切换协议为 rediss 或启用 SSL 选项。

  • 先判断:确认使用的是云托管实例还是自建 Redis,云实例通常在控制台一键开启,自建需修改配置文件。
  • 优先做:生成或下载 CA 证书,配置服务端 tls-port 及证书路径,建议关闭普通 port 端口避免冲突,重启服务。
  • 再验证:客户端连接时携带 CA 证书,使用加密端口测试连通性。

命令速用版

自建 Redis 服务端核心配置片段(/etc/redis/redis.conf):

port 0
tls-port 6379
tls-cert-file /etc/redis/ssl/redis.crt
tls-key-file /etc/redis/ssl/redis.key
tls-ca-cert-file /etc/redis/ssl/ca.crt

客户端连接测试命令:

redis-cli -p 6379 `--ssl` `--cacert` /etc/redis/ssl/ca.crt

为什么会这样

Redis 默认通信协议 RESP 在 6.0 之前仅支持明文传输,数据在网络上容易被窃听或篡改。开启 SSL/TLS 后,通信链路被加密,能防止中间人攻击并满足合规要求。但加密会增加 CPU 开销,导致读写性能有所下降,且开启过程通常需要重启实例,会造成秒级连接闪断。

怎么开启 Redis 消息队列传输加密 SSL 连接配置?

分步处理

1. 准备证书文件

云实例通常在开启 SSL 后直接在控制台下载 CA 证书。自建服务器可使用 OpenSSL 生成自签名证书(测试环境):

openssl genrsa -out redis.key 2048
openssl req -new -key redis.key -out redis.csr
openssl x509 -req -days 365 -in redis.csr -signkey redis.key -out redis.crt

注意:生产环境建议使用受信任的 CA 机构颁发的证书,或搭建内部 PKI。上述自签名证书仅适用于测试,客户端连接时需忽略证书验证或导入自签名 CA。

2. 服务端开启 SSL

怎么开启 Redis 消息队列传输加密 SSL 连接配置?

云实例登录控制台找到 SSL 设置开启。自建 Redis 修改配置文件,确保 tls-cert-file 等路径正确。若只希望使用加密连接,建议设置 port 0 关闭明文端口,避免端口冲突或未加密访问泄露。

3. 客户端配置

Python (redis-py) 示例:

怎么开启 Redis 消息队列传输加密 SSL 连接配置?
import redis
r = redis.Redis(host='localhost', port=6379, ssl=True, ssl_cert_reqs='required', ssl_ca_certs='/path/to/ca.crt')

Navicat 连接需版本≥16.0.15,连接类型选 Redis (Standalone),勾选 Use SSL 并填入 CA 证书路径。

怎么验证是否生效

使用支持 SSL 的客户端工具连接,若能成功执行 PING 命令并返回 PONG 即表示加密链路建立。命令行可使用 redis-cli 加上 `--ssl` 参数测试。

进阶验证:使用 openssl 检查握手详情:

openssl s_client -connect localhost:6379 -tls1_2

若连接报错 Certificate verify failed,通常是因为客户端未正确配置 CA 证书路径或证书链不完整。

常见坑

  • 性能损耗:开启 SSL 后实例读写性能会有所下降,业务低峰期操作。
  • 客户端兼容性:旧版本客户端工具(如 Navicat 旧版)可能不支持 Redis TLS 握手,需升级软件。
  • 端口冲突:同时监听 port 和 tls-port 同一端口会导致服务启动失败,需区分端口或关闭 plain port。
  • 连接闪断:开启或关闭 SSL 会重启实例,确保应用具备重连机制。
  • 证书混淆:tls-ca-cert-file 是用于验证客户端证书(双向认证)或证书链,客户端连接只需信任签发服务端证书的 CA 即可。

参考来源

  • 华为云帮助中心 - 配置 Redis SSL 数据加密传输 (support.huaweicloud.com)
  • Predis TLS/SSL 配置指南
  • Navicat 连接 Redis 如何配置 SSL 证书
  • Redis Python 客户端 redis-py 文档