我正在尝试使用Ruby Redis客户端和两个NodeJS客户端(node_redis或ioredis)之一来连接到具有过渡加密和身份验证且启用了Amazon ElastiCache集群的问题。对于所有三个客户端,一旦我连接,我就会立即收到ECONNRESET错误,并在发生连接重试时一遍又一遍。
我已经关注过AWS文档,并且能够使用stunnel通过redis- cli成功进行连接,但是到目前为止,尚未能够与任何其他客户端进行连接。
从这个SO答案来看,似乎不需要证书,我们只需要将空选项传递给TLS配置(如果适用),但是无论我输入什么内容都不会成功。我还尝试过stunnel.pem在所有客户端中传递默认的tunnel 私钥作为证书,以防万一,这显然也不起作用。其他使用ElastiCache的人的帮助或专业知识将是有帮助的!
stunnel.pem
对于这两个客户端,默认的TLS行为是验证服务器证书,我们需要将其禁用。这两个客户端的解决方案如下:
NodeJS客户端:
const redis = require('redis') const client = redis.createClient({host: hostOrIp, port: 6379, auth_pass: 'thePassword', tls: { checkServerIdentity: () => undefined }})
Ruby客户端:
require "redis" redis = Redis.new(url: connectionString, ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })