自定义域名对接ElastiCache Redis SSL时Lambda连接失败问题咨询
问题根因与解决方案
根因说明
你遇到的报错是TLS证书的主机名校验不匹配导致的:
- AWS ElastiCache Redis的SSL证书仅对AWS官方分配的原生端点域名(后缀为
*.use1.cache.amazonaws.com这类)生效,你自定义的CNAME域名dev-my-site.mydomain.com不在证书的使用者可选名称(SAN)列表中,因此严格的TLS校验会失败。 - 本地
redis-cli可以正常连接的原因是:redis-cli的TLS模式默认不开启服务器主机名校验,因此跳过了这个校验逻辑,而Lambda运行环境的标准TLS库默认开启严格校验。
可选解决方案
方案1:跳过TLS主机名校验(推荐非生产/内部可信环境使用)
在Redis客户端的TLS配置中,仅关闭主机名匹配校验,保留证书有效性校验,平衡易用性和基础安全性。
以Node.js的ioredis客户端为例,配置示例:
const Redis = require('ioredis'); const redisClient = new Redis({ host: 'dev-my-site.mydomain.com', port: 6379, tls: { // 自定义校验逻辑,直接返回undefined代表校验通过 checkServerIdentity: (hostname, cert) => undefined } });
注意:该方案需确保你的DNS解析链路可信,建议仅在VPC内部使用私有托管的DNS记录,避免DNS劫持风险。
方案2:直接使用ElastiCache原生端点(最推荐)
如果没有必须使用自定义域名的强需求(比如跨环境统一域名配置),直接使用AWS分配的原生主端点master.dev-my-site.wmrsll.use1.cache.amazonaws.com:6379连接,不需要修改任何TLS配置,安全性最高,也没有额外维护成本。
方案3:新增TLS代理层(适用必须用自定义域名的生产场景)
如果业务强制要求使用自定义域名,你可以在VPC内部署TCP代理服务(如HAProxy、Nginx),为代理配置覆盖你自定义域名的SSL证书,Lambda连接代理的自定义域名,代理再转发请求到ElastiCache原生端点。该方案需要额外维护代理集群,可用性和性能都需要额外保障。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

