配置 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