如何为Redis 6379端口配置SSL证书及从Node.js服务端正确调用
核心问题说明
Redis 默认采用原生RESP协议通信,本身不支持HTTP/HTTPS协议。你所说的HTTP环境下连接正常,本质是HTTP服务运行时走普通TCP连接访问Redis,而你尝试用HTTPS协议直接请求Redis 6379端口,不符合Redis的通信规则,自然连接失败。
要实现加密访问Redis,需要给Redis本身配置TLS加密,而非给Redis端口部署常规Web服务的SSL证书。
配置步骤
1. 准备证书文件
可直接复用你现有443/8080端口使用的SSL证书,需要用到三类文件:
- 域名证书文件(如
fullchain.pem) - 私钥文件(如
privkey.pem) - CA根证书文件(可选,仅自签证书需要)
2. 配置Redis开启TLS支持
首先确认你的Redis版本 >= 6.0,只有6.0及以上版本原生支持TLS。
修改Redis配置文件redis.conf,添加/修改以下配置:
# 关闭非加密普通TCP端口,如需同时支持非加密连接可保留port 6379,单独设置tls-port为其他端口如6380 port 0 tls-port 6379 # 配置证书路径 tls-cert-file /path/to/your/fullchain.pem tls-key-file /path/to/your/privkey.pem # 自签证书需要配置CA证书路径,公共CA颁发的证书可省略该行 tls-ca-cert-file /path/to/your/ca.pem # 可选安全配置 tls-auth-clients no # 无需客户端提供证书,需要更高安全等级可设为yes强制客户端验证 tls-prefer-server-ciphers yes
修改完成后重启Redis服务生效:systemctl restart redis
3. 调整Node.js服务Redis连接配置
修改Node.js项目中Redis客户端的连接参数,开启TLS模式,以常用的ioredis客户端为例:
const Redis = require('ioredis'); const redis = new Redis({ host: '你的Redis服务域名', port: 6379, tls: { // 自签证书需添加ca配置传入根证书内容,公共CA证书可省略该行 // ca: fs.readFileSync('/path/to/ca.pem'), rejectUnauthorized: true // 开启证书校验,避免中间人攻击 } });
如果使用Node.js官方redis客户端,配置逻辑一致,新增tls配置项即可。
4. 验证配置
可通过redis-cli工具直接测试TLS连接是否正常:
# 自签证书需添加--cacert参数指定根证书路径 redis-cli --tls -h 你的Redis服务域名 -p 6379 --cacert /path/to/ca.pem
能正常连接并执行Redis命令即代表配置生效。
注意事项
- 不要尝试用Nginx等Web反向代理给Redis做HTTPS转发,HTTP协议和Redis的RESP协议不兼容,只会导致连接异常
- 如果你使用的Redis版本低于6.0,可以用stunnel搭建TCP层的TLS加密隧道代理Redis 6379端口,配置逻辑和Redis原生TLS一致
内容的提问来源于stack exchange,提问作者keshav
相关产品推荐
相关产品推荐

