最近,公司在做渗透测试,要求redis使用加密传输。经过比较redis各版本,发现redis6.0开始正式支持TLS 通道加密,更加安全。redis6.0以下版本只支持数据加密,最新版本为redis7.0。考虑到redis7.0刚出不久,新的功能项目也暂时用不上。故此决定选用redis6.2.11(6.0的最新稳定版)。
安装了 Docker。
Docker Compose 已安装。
访问docker官网:
https://hub.docker.com/_/redis/tags?page=2
点击Tags:
找到我们想要的版本,获取下载命令:docker pull redis:6.2.11
在服务器上分别运行:
docker pull redis:6.2.11
docker images
看到上图结果,说明redis 容器镜像下载成功。
让我们先在没有 TLS 的情况下运行 Redis 容器
创建一个文件compose.yml并粘贴下面的内容。
services:redis:image: redis:6.2.11network_mode: "host"volumes: #/home/10config/redis/redis.conf 是宿主机路径,必须存在#/usr/local/etc/redis/redis.conf 是redis容器路径- /home/10config/redis/redis.conf:/usr/local/etc/redis/redis.conf restart: alwayscontainer_name: legrand_redis6.2.11_v1privileged: truecommand: redis-server /usr/local/etc/redis/redis.conf
redis.conf 可以在redis的安装包获取。
redis.conf 百度网盘下载路径 提取码:ju3h
运行容器:
docker-compose up -d #启动容器
docker exec -it legrand_redis6.2.11_v1 /bin/bash #进入容器
运行docker exec -it legrand_redis6.2.11_v1 /bin/bash,出现如下图,说明容器运行成功。
为了使用 TLS 运行 Redis,我们需要提供自己的 SSL 证书。您可以购买一个,或者对于这个我们不需要购买的用例,但为我们的 Redis 实例和连接到它的客户端生成我们自己的自签名证书。
运行脚本
#!/bin/sh
mkdir -p tests/tlsopenssl genrsa -out tests/tls/ca.key 2048
openssl req \-x509 -new -nodes -sha256 \-key tests/tls/ca.key \-days 36500 \-subj '/O=Redis Test/CN=Certificate Authority' \-out tests/tls/ca.crtopenssl genrsa -out tests/tls/redis.key 2048openssl req \-new -sha256 \-key tests/tls/redis.key \-subj '/O=Redis Test/CN=Server' | \openssl x509 \-req -sha256 \-CA tests/tls/ca.crt \-CAkey tests/tls/ca.key \-CAserial tests/tls/ca.txt \-CAcreateserial \-days 36500 \-out tests/tls/redis.crtopenssl dhparam -out tests/tls/redis.dh 2048
注意:证书默认有效期为1年 ,-days 可以设置证书有效期 ,单位天
得到以下文件:
其中:
ca.crt :服务器证书
ca.key:服务器私钥
redis.crt:客户端证书
redis.key:客户端私钥
services:redis:image: redis:6.2.11network_mode: "host"volumes: #/home/10config/redis/redis.conf 是宿主机路径,必须存在#/usr/local/etc/redis/redis.conf 是redis容器路径- /home/10config/redis/redis.conf:/usr/local/etc/redis/redis.conf #挂载到宿主机的证书路径,使容器能访问到证书 - /home/3redis/tests/tls:/tlsrestart: alwayscontainer_name: legrand_redis6.2.11_v1privileged: truecommand: redis-server /usr/local/etc/redis/redis.conf
redis.conf 增加以下配置
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 0 #关闭非tls端口
tls-port 6379################################## TLS 配置 ###################################
tls-cert-file /tls/redis.crt
tls-key-file /tls/redis.key
tls-ca-cert-file /tls/ca.crt
#tls-dh-params-file /tls/redis.dh
tls-auth-clients yes
docker-compose up -d
docker exec -it legrand_redis6.2.11_v1 /bin/bash
# 以tls方式连接redis客户端
redis-cli --tls \
--cert /tls/redis.crt \
--key /tls/redis.key \
--cacert /tls/ca.crt
至此Redis TLS Docker容器配置成功。
https://devpress.csdn.net/redis/62ed1a027e668234661807b8.html
请参考:Spring-Data-Redis 和 Redisson TLS/SSL 连接