我已经在使用 AWS Elasticache Redis,但没有“传输中加密”。我创建了一个启用了此加密的新小型/临时集群,但我无法连接到它 -
redis-cli error: Connection reset by peer
eg: redis-cli -h aws.host.name -p 6379
注意:当 Redis 集群上未启用传输中加密时,连接正常。
我确信这是因为我没有使用 EC2 实例的 TLS 加密:
“要连接到启用了传输加密的集群,必须为数据库启用传输层安全性 (TLS)。要连接到未启用传输加密的集群,数据库不能启用 TLS。”
问题:
- 我真的不确定如何在 EC2 上启用 TLS 加密。我该怎么做?我需要使用 stunnel 还是可以使用 AWS SSL 证书?
- 这会对性能产生什么影响?
- 我也在研究 Redis AUTH 密码。这会对性能造成很大影响吗?我猜如果 Redis 的频率受到影响,它可能会做得很好。
非常感谢。
答案1
标准客户端 redis-cli 不支持加密。支持 ssl/TLS 加密的 redis 客户端列表位于https://redislabs.com/blog/secure-redis-ssl-added-to-redsmin-and-clients/
答案2
- 您不需要使用 stunnel。标准
redis-cli -h aws.host.name -p 6379
应该适用于您的 EC2 实例。检查您是否可以连接到主机和端口(简单来说telnet host 6379
)。如果没有连接,请检查 ElastiCache 集群的安全组设置(您需要有入站端口 6379 规则,该规则在 EC2 选项卡的安全组部分中配置)。 - 有一些网络开销(见https://stackoverflow.com/questions/1615882/how-much-network-overhead-does-tls-add-compared-to-a-non-encrypted-connection)和额外的CPU(见HTTPS 开销与 HTTP 相比)。我不认为这对大多数应用程序来说很重要。一切都取决于你如何使用它,所以请自行测试。
- Redis AUTH 交换仅在您建立会话时发生。此后不应有额外的开销。
答案3
标准 redis 客户端(即 redis 服务器附带的 redis-cli)不支持 TLS。
这就是为什么禁用传输加密后仍能成功连接到服务器的原因。您应该使用支持 TLS 的客户端。