如何使用 redis-cli 连接启用 Amazon ElastiCache 传输中加密功能的 Redis 节点?

上次更新时间:2020 年 7 月 9 日

Redis 命令行界面 (redis-cli) 不支持启用 SSL 的客户端。如何访问来自启用 Amazon ElastiCache 传输中加密功能的 Redis 节点的数据?

简短描述

redis-cli 客户端不支持 SSL/TLS 连接。要使用 redis-cli 访问启用传输中加密功能的 ElastiCache for Redis 节点(已禁用集群模式),在您的基于 Linux 的客户端中使用 stunnel 包。stunnel 命令会创建一条 SSL 隧道,指向在 stunnel 配置中指定的 Redis 节点。在建立隧道以后,您可以使用 redis-cli 连接启用传输中加密功能的集群节点。

注意:要连接到启用传输中加密的 Redis 节点(已启用集群模式),请使用 Redis 客户端。这些客户端原生支持 SSL 和启用集群模式的集群。如需更多信息,见 Redis 网站上的 Redis.io/clients

解决方法

1.    使用 SSH 连接到 Linux 客户端实例并安装 stunnel 包:

在基于 CentOS 的系统上:

$sudo yum install stunnel

在基于 Debian 的系统上 (Ubuntu 16):

$sudo apt-get install stunnel

2.    在 redis-cli.conf 文件中,将 Redis 集群终端节点添加到一个或多个连接参数:

# cat /etc/stunnel/redis-cli.conf
fips = no
setuid = root
setgid = root
pid = /var/run/stunnel.pid
debug = 7
options = NO_SSLv2
options = NO_SSLv3
[redis-cli]
  client = yes
  accept = 127.0.0.1:6379
  connect = master.ssltest.wif0lh.use1.cache.amazonaws.com:6379
[redis-cli-replica]
  client = yes
  accept = 127.0.0.1:6380
  connect = ssltest-002.ssltest.wif0lh.use1.cache.amazonaws.com:6379

在此示例中,配置文件有两个连接,redis-cli 和 redis-cli-replica。参数设置如下:

  • client 设置为 yes,以指定此 stunnel 实例是客户端。
  • accept 设置为客户端 IP。在此示例中,主连接设置为默认地址为 127.0.0.1,端口为 6379 的 Redis。副本必须调用不同端口,因而设置为 6380。您可以使用临时端口 1024 到 65535。
  • connect 设置为 Redis 服务器终端节点。有关更多信息,请参阅查找连接终端节点

3.    开始 stunnel

$ sudo stunnel /etc/stunnel/redis-cli.conf

使用 netstat 命令确认隧道已启动:

# netstat -tulnp | grep -i stunnel
tcp    0      0 127.0.0.1:6379      0.0.0.0:*        LISTEN      3189/stunnel
tcp    0      0 127.0.0.1:6380      0.0.0.0:*        LISTEN      3189/stunnel

4.    您现在可以使用 redis-cli 通过隧道的本地终端节点连接到加密的 Redis 节点:

# redis-cli -h localhost -p 6379 -a MySecretPassword
localhost:6379>set foo "bar"
OK
localhost:6379>get foo
"bar"

注意:如果您的实例受密码保护,则 redis-cli 中的 -a MySecretPassword 选项无需 AUTH 命令即可执行身份验证。有关更多信息,见 Redis 网站上的 redis-cli, the Redis command line interface

此示例使用 telnet 连接到 Redis 服务器:

# telnet localhost 6379
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
auth MySecretPassword
+OKget foo
$3
bar

运行 pkill 命令以停止和关闭 SSL 隧道:

$ sudo pkill stunnel

这篇文章对您有帮助吗?


您是否需要账单或技术支持?