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

NodeJS调用AWS Lambda时Axios出现SSL握手失败(Alert 40)问题

问题场景

基于Serverless框架开发Web应用,部署了AWS Lambda作为登录验证服务,其他Lambda通过Axios调用该验证服务时出现SSL握手失败错误:

AxiosError: write EPROTO 18440:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:c:\ws\deps\openssl\openssl\ssl\record\rec_layer_s3.c:1546:SSL alert number 40

Postman及本地Axios调用正常,尝试自定义HTTPS Agent配置后问题仍未解决。

解决方案

1. 检查并升级Lambda运行时的Node.js版本

AWS Lambda不同Node.js版本自带的OpenSSL库版本差异较大,旧版本(如Node.js 14及以下)可能不支持API Gateway要求的TLS cipher套件:

  • 登录AWS控制台,将调用方Lambda的运行时升级至Node.js 16.x或更高版本
  • 可在Lambda代码中打印环境信息,对比本地与云端差异:
    console.log(`Node版本: ${process.version}, OpenSSL版本: ${process.versions.openssl}`);
    

2. 修正Axios的HTTPS Agent配置

确保自定义Agent正确传入Axios实例,同时放宽cipher兼容范围:

const https = require('https');
const axios = require('axios');

// 构造兼容更多场景的HTTPS Agent
const agent = new https.Agent({
  secureProtocol: 'TLSv1_2_method',
  ciphers: 'ALL:@SECLEVEL=1', // 降低安全级别以兼容更多cipher套件(临时排查用,生产需调整)
  // rejectUnauthorized: false, // 仅临时排查证书问题,生产环境请勿开启
});

// 创建Axios实例时必须传入agent
const http = axios.create({
  baseURL: "https://**********.execute-api.us-east-1.amazonaws.com/",
  httpsAgent: agent
});

// 仅传入必要的请求头,避免Lambda event.headers中的内部头干扰
const responseStatus = await http.get("dev/verify-user-login", {
  headers: {
    Authorization: event.headers.Authorization
  }
});

3. 排查API Gateway及网络配置

  • 若使用自定义域名,检查API Gateway自定义域名的TLS配置,确保开启TLS 1.2(默认execute-api域名无需额外配置)
  • 若调用方Lambda部署在VPC内,需确保VPC配置了NAT网关/互联网网关,允许Lambda访问公网API Gateway端点

4. 改用AWS SDK直接调用Lambda(推荐)

避免跨服务HTTPS调用的SSL问题,直接用AWS SDK调用验证Lambda:

const AWS = require('aws-sdk');
const lambda = new AWS.Lambda({ region: 'us-east-1' });

async function callVerifyLambda(headers) {
  const params = {
    FunctionName: 'your-verify-user-login-lambda-function-name',
    InvocationType: 'RequestResponse',
    Payload: JSON.stringify({ headers })
  };

  const response = await lambda.invoke(params).promise();
  return JSON.parse(response.Payload);
}

// 在handler中调用
const verifyResult = await callVerifyLambda({ Authorization: event.headers.Authorization });

内容的提问来源于stack exchange,提问作者Jonathan Urrego Zea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:37:17