如果有防火墙禁止明文使用 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,                  # 禁用证书验证
)