当前位置: 首页 > 知识库问答 >
问题:

从客户端(而不是redis-cli组件)使用中转加密身份验证连接到AWS ElastiCache

方嘉志
2023-03-14

我正在尝试使用Ruby redis客户端和两个NodeJS客户端(node_redis或ioredis)中的任何一个连接到启用了传输中加密和身份验证的Amazon ElastiCache集群,并且遇到问题。对于所有三个客户端,一旦我连接,我就会立即抛出一个ECONNRESET错误,并且在连接重试发生时一次又一次。

我遵循了AWS文档,能够使用stunnel通过redis cli成功连接,但到目前为止还无法连接任何其他客户端。

从这个SO答案来看,似乎不需要证书,我们只需要将空选项传递给TLS配置(如果适用),但无论我输入什么,我都不会成功。我还尝试传递默认的stunnel。pem将私钥作为所有客户端的证书以防万一,显然也不起作用。使用ElastiCache的其他人提供的任何帮助或专业知识都会很有帮助!

共有2个答案

丌官嘉福
2023-03-14

我遇到了类似的问题,但不是EconReset,而是超时。对我来说,有几个问题需要解决

  • lambda需要VPC权限
  • ElastiCache安全组需要来自Lambda安全组的入站规则,该规则允许在Redis端口上进行通信。我以为他们可能在同一个安全小组
  • 由于传输中的加密已打开,我需要通过redis。RedisClient(…ssl=True)。redis py页面提到需要将ssl\u cert\u reqs设置为None,以便与ElastiCache一起使用,类似于所回答的内容,但在我的情况下似乎不是这样。我认为AWS已经更新了ElastiCache证书,使其具有正确的主机名。但是,我确实需要通过ssl=True

有道理,需要设置ssl=True,但连接刚刚超时,所以我反复尝试找出权限/专有网络/SG设置的问题所在。

湛宏旷
2023-03-14

对于这两个客户端,默认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 })
 类似资料:
  • 我遵循此处共享的文档-https://learn.microsoft.com/en-us/azure/databricks/data/data-sources/azure/azure-datalake-gen2#adls2-aad凭据来使用服务主体挂载我的datalake帐户。文档中提到了使用Azure AD App的客户端机密进行此操作的步骤。我找不到使用客户端证书的方法。此流是否支持使用证书凭

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

  • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,