如果有防火墙禁止明文使用 redis,可以通过如下方式解决
1. 生成 ssl 证书
1.1 安装 openssl
apt install openssl -y
1.2 生成 ssl 证书 (有效期365天)
openssl req -x509 -newkey rsa:4096 -nodes -keyout redis.key -out redis.crt -days 365
2. 配置 redis.conf
增加如下几行配置
tls-port 6378
tls-cert-file /data/ca/redis.crt
tls-key-file /data/ca/redis.key
tls-auth-clients no
其中的 tls-auth-clients
表示不进行客户端的证书认证,只进行服务端的证书认证。
3. 启动服务
services:
redis_debug:
image: redis:7.2.4
command:
- "redis-server"
- "/data/ca/redis.conf"
- "--save"
- "60"
- "1"
- "--loglevel"
- "warning"
ports:
- "11328:6378"
- "11329:6379"
user: root
network_mode: bridge
hostname: redis-server
restart: always
volumes:
- /etc/localtime:/etc/localtime
- ./redis/data:/data
4. 测试 redis 服务
因为使用的是自签名的证书,所以需要制定参数 ssl_cert_reqs=None
4.1 连接方式一
rds = redis.Redis.from_url("rediss://172.17.0.1:11328/0", ssl_cert_reqs=None)
4.2 连接方式二
rds = redis.Redis(
host='localhost',
port=11328,
ssl=True,
#ssl_certfile='redis/data/ca/client.crt', # 客户端证书
#ssl_keyfile='redis/data/ca/client.key', # 客户端私钥
#ssl_ca_certs='/path/to/ca.crt', # CA 证书
ssl_cert_reqs=None, # 禁用证书验证
)