Redis开启SSL加密保护数据安全,怎么配置和使用ssl防护呢
- 问答
- 2025-12-29 01:45:07
- 5
Redis本身在最初的版本中并不支持原生的SSL/TLS加密,这意味着客户端与Redis服务器之间的网络通信默认是明文的,如果在一个不安全的网络环境中(比如跨公网或共享网络),数据传输存在被窃听或篡改的风险,为了解决这个问题,从Redis 6.0版本开始,官方引入了对TLS(SSL的后继者)的原生支持,如果你的Redis版本低于6.0,则需要使用一种叫做“SSL隧道”的技术(例如使用Stunnel工具)来为Redis连接提供加密层,以下内容将主要基于Redis 6.0及以上版本的原生TLS配置进行说明,并简要提及旧版本的替代方案,主要参考了Redis官方文档关于TLS的章节。
准备工作:生成TLS证书
在配置Redis使用TLS之前,你需要准备一套TLS证书,证书用于验证服务器的身份,并建立加密连接,在正式的生产环境中,你应该使用由受信任的证书颁发机构(CA)签发的证书,但对于测试或内部网络环境,你可以选择使用自签名证书。
-
创建证书颁发机构(CA)(用于自签名场景): 你需要一个私钥和一个自签名的CA证书来为你自己的服务器证书签名。
# 生成CA的私钥 openssl genrsa -out ca.key 4096 # 使用私钥生成自签名的CA证书 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
在执行第二个命令时,你会被要求填写一些国家、组织等信息,这些可以按需填写。
-
生成Redis服务器证书: 为你的Redis服务器生成证书,首先创建一个私钥,然后创建一个证书签名请求(CSR),最后用上一步创建的CA为其签名。
# 生成Redis服务器的私钥 openssl genrsa -out redis.key 2048 # 创建证书签名请求(CSR) openssl req -new -key redis.key -out redis.csr # 使用CA证书和私钥为Redis服务器证书签名 openssl x509 -req -in redis.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out redis.crt -days 365 -sha256
你应该至少拥有以下文件:
ca.crt(CA证书)、redis.key(服务器私钥)和redis.crt(服务器证书),请将私钥文件(.key)妥善保管,避免泄露。
配置Redis服务器以使用TLS
有了证书文件后,你需要修改Redis的配置文件(通常是 redis.conf)来启用TLS。
-
指定证书和私钥: 在
redis.conf文件中,找到或添加以下配置项,并指向你生成的证书文件路径。tls-cert-file /path/to/redis.crt tls-key-file /path/to/redis.key将
/path/to/替换为你的证书文件实际存放的路径。 -
指定CA证书(可选但推荐): 如果你希望Redis服务器强制验证连接的客户端也持有由特定CA签发的证书(即双向TLS认证),可以设置CA证书路径,如果只希望服务器端提供证书(单向认证),客户端可以不提供证书,此配置可省略。

tls-ca-cert-file /path/to/ca.crt -
启用TLS端口: Redis默认监听6379端口(非TLS),你需要配置一个额外的端口来监听TLS连接,可以保留原有端口,也可以将TLS设为唯一连接方式。
port 0 # 禁用普通非加密端口 tls-port 6379 # 使用6379端口作为TLS端口或者,同时启用两种端口:
port 6379 # 普通端口仍可连接 tls-port 6380 # TLS端口为6380从安全角度出发,在生产环境中建议禁用非加密端口。
-
其他安全配置(可选):
tls-auth-clients optional: 设置客户端认证方式。optional表示客户端可以提供证书,但不是必须的,如果设为required,则客户端必须提供有效的证书才能连接。tls-protocols "TLSv1.2 TLSv1.3": 指定允许的TLS协议版本,建议禁用不安全的旧版本(如TLSv1.0, TLSv1.1)。
-
重启Redis服务: 保存配置文件后,重启Redis服务器以使配置生效。

redis-server /path/to/redis.conf
配置TLS客户端连接
服务器配置好后,客户端也需要相应调整才能通过TLS连接。
-
使用redis-cli连接: Redis自带的命令行工具
redis-cli支持TLS连接。redis-cli --tls --cert /path/to/client.crt --key /path/to/client.key --cacert /path/to/ca.crt -p 6379
--tls: 启用TLS。--cacert: 指定CA证书路径,用于验证服务器证书,如果服务器使用的是自签名证书,这里就填你之前生成的ca.crt。--cert和--key: 如果服务器要求客户端证书认证(双向认证),你需要提供客户端的证书和私钥,如果只是单向认证,这两个参数可以省略。
-
在应用程序中连接: 大多数流行的Redis客户端库(如Python的redis-py,Java的Lettuce,Node.js的ioredis等)都支持TLS连接,你需要在创建客户端连接时传入TLS相关的参数,通常包括:
ca或ca_cert: CA证书内容或路径。cert和key: 客户端证书和私钥(如果需要双向认证)。servername: 通常需要设置为连接时使用的主机名,用于SNI(服务器名称指示)扩展,这对于使用虚拟主机的TLS服务很重要,具体参数名称请查阅你所使用客户端库的文档。
对于Redis 6.0以下版本的解决方案
如果你的Redis版本较旧,无法升级,可以使用Stunnel等工具创建加密隧道,其原理是:在Redis服务器端运行一个Stunnel进程,监听一个加密端口(如6380),将接收到的加密流量解密后转发给本地的Redis端口(6379),同样,在客户端也运行一个Stunnel进程,监听一个本地端口(如16379),将应用程序发往这个本地端口的流量加密后发送给服务器端的Stunnel加密端口,这样,应用程序只需要连接本地的16379端口,就像连接一个普通的Redis一样,而所有网络上的数据都已经被加密,这种方法虽然增加了部署的复杂性,但能为旧版本Redis提供有效的传输加密。
为Redis开启SSL/TLS加密是保护数据传输安全的关键一步,对于Redis 6.0+的用户,直接使用其原生TLS支持是最佳选择,配置过程涉及证书生成和简单的配置文件修改,关键在于确保证书文件的路径配置正确,并根据安全需求选择单向或双向认证,对于旧版本用户,则可以考虑使用Stunnel等隧道工具作为替代方案,无论采用哪种方式,在将配置部署到生产环境之前,都应在测试环境中进行充分的连接测试,确保加密通道工作正常。
本文由盘雅霜于2025-12-29发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/70370.html
