You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS APIGateway.2合规通过后SSL后端认证校验未生效问题

根因分析

你配置的客户端证书校验逻辑不生效,核心原因是架构链路不匹配:

  • 你通过aws-serverless-express将Nest服务包装为Lambda函数运行,API Gateway对接Lambda走的是AWS内部的函数调用链路,并非端到端的HTTPS直连。你在NestApplicationOptions中配置的httpsOptions仅对直接接收的HTTPS入站请求生效,Lambda触发场景下不会触发TLS层的证书校验逻辑,所以无论API Gateway是否解绑证书,请求都能正常通过。
  • Security Hub的APIGateway.2检查仅校验API Gateway侧是否给stage绑定了客户端证书,不校验后端是否实际开启校验,所以你完成前两步操作后就直接通过了合规检查。

两种可行解决方案

方案1:切换为HTTP/HTTPS后端集成

如果要复用你当前写的SSL校验代码,需要调整集成方式:

  • 将Nest服务部署在可以直接接收HTTPS请求的环境(EC2、ECS、ALB等)
  • 将API Gateway的后端集成从Lambda集成改为HTTPS集成,配置后端地址为你部署服务的HTTPS地址
  • 这种场景下API Gateway向后端发起请求时会携带绑定的客户端证书,你现有配置的requestCert、rejectUnauthorized逻辑会正常生效,解绑证书后请求会直接被SSL层拦截报错。

方案2:保留Lambda集成,新增应用层证书校验

如果不想调整现有Lambda部署架构,可以通过应用层校验实现同等效果:

  1. 计算你创建的API Gateway客户端证书的SHA1/MD5指纹
  2. 两种校验数据获取方式二选一:
    • 方式一:在API Gateway中配置集成请求,新增自定义请求头,将API Gateway客户端证书的指纹作为固定值传入后端
    • 方式二:直接从Lambda触发事件的requestContext.identity.clientCert字段中获取API Gateway传递的客户端证书信息,无头部伪造风险,更推荐
  3. 在Nest服务中新增全局守卫,拦截所有请求校验拿到的证书指纹是否和你本地存储的一致,不一致直接返回401未授权。

额外注意事项

你配置的自定义域名映射仅影响API的调用入口,和后端客户端证书校验逻辑没有直接关联,确保你绑定客户端证书的stage和自定义域名映射的stage是同一个即可。

内容的提问来源于stack exchange,提问作者kartoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:54:02