配置 TLS 加密
应用场景
- 
进行数据加密(message privacy):encryption实现加密, 所有信息都加密传输,第三方无法嗅探。
 - 
保证数据完整性(message integrity):通过MAC校验机制,一旦被篡改,通信双方会立刻发现。
 - 
身份认证(mutual authentication):客户端与服务端方都要配备同一组证书,防止身份被冒充。
 
前提条件
Redis 从版本 6 开始支持 SSL/TLS,这是一项可选功能,需要在编译时启用。具体操作请参见启用 TLS。
约束与限制
TLS 当前不支持 I/O 多线程。
启用 TLS
以下操作以 Ubuntu 18.04.5 为例。
- 
下载 Redis 源码。
wget https://download.redis.io/releases/redis-6.2.5.tar.gz - 
解压源码包。
tar xf redis-6.2.5.tar.gz - 
进入解压目录。
cd redis-6.2.5/ - 
安装依赖包。
apt-get update apt install make gcc libssl-dev libsystemd-dev tcl tcl-tls - 
编译并启用TLS。
make BUILD_TLS=yes 
证书配置
为了支持 TLS,Redis 必须配置 X.509 证书和私钥。
- 
创建证书。
./utils/gen-test-certs.sh - 
查看证书文件。
ls ./tests/tls/可以看到生成以下文件。
ca.crt ca.key ca.txt client.crt client.key openssl.cnf redis.crt redis.dh redis.key server.crt server.key其中:
获取 TLS-Cert 项:
cat ./tests/tls/redis.crt获取 TLS-Key 项:
cat ./tests/tls/redis.key获取 TLS-CA-Cert 项:
cat ./tests/tls/ca.crt获取 TLS-DH-Params 项:
cat ./tests/tls/redis.dh 
修改配置参数
为正常使用 TLS,您还需要在控制台的参数配置页面配置 TLS 相关参数。
注意事项:
- 
端口 及 TLS-Port 不能设置为 80, 因为 80 端口已经被 web 占用。
 - 
端口 与 TLS-Port 两个端口, 不能设置为同一个值。
 - 
TLS-Cluster 设置为
no时:- 
不得关闭 端口 (将其设置为0)
 - 
不得将 TLS-Port 设置为
端口 +10000 
 - 
 - 
TLS-Cluster 设置为
yes时:- 
不得关闭 TLS-Port (将其设置为0)
 - 
不得将 端口 设置为
TLS-Port +10000 
 - 
 
| 参数项 | 参数说明 | 配置值 | 
|---|---|---|
端口  | 
明文端口,设置为   | 
0  | 
TLS-Port  | 
TLS 加密端口  | 
6379  | 
TLS-Cluster  | 
Cluster 通信是否使用加密口 
  | 
yes  | 
TLS-Cert  | 
证书  | 
配置为   | 
TLS-Key  | 
私钥  | 
配置为   | 
TLS-CA-Cert  | 
CA 证书  | 
配置为   | 
TLS-DH-Params  | 
密匙交换参数  | 
配置为   | 
验证 TLS
执行以下命令进行验证:
./src/redis-cli -h <redis_instance_address> -p <TLS-Port> --tls --cert ./tests/tls/redis.crt --key ./tests/tls/redis.key --cacert ./tests/tls/ca.crt Info Server
- 
<redis_instance_address>:表示 Redis Cluster 实例的连接地址,请根据实际地址替换。 - 
<TLS-Port>:表示 Redis Cluster 实例的 TLS 端口号。 
显示如下信息表示 TLS 配置成功:
redis_version:6.2.5 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:12957d9199f59509 redis_mode:cluster os:Linux 4.15.0-58-generic x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:c11-builtin gcc_version:7.5.0 process_id:5186 process_supervised:no run_id:582101ac9ac0314b265439da67d00854d5d19a70 tcp_port:6379 server_time_usec:1635753556324954 uptime_in_seconds:5395 uptime_in_days:0 hz:10 configured_hz:10 lru_clock:8363604 executable:/opt/redis/current/redis-server config_file:/data/redis/redis.conf io_threads_active:0