NodeJS:握手失败:使用 Axios 向 AWS Lambda 发出 http 请求时出现 SSL 警报编号 40

问题描述 投票:0回答:2

我正在使用无服务器框架开发一个Web应用程序,为了使用某些服务,我需要验证用户是否有活动会话。为此,我使用部署在 AWS Lambda 上的 lambda 来验证登录并按以下方式使用 axios 在每个服务中调用它:

module.exports.handler = async (event) => {
try {
    // Get request headers from the event

    const options = {
        headers: event.headers,
    };


    // Send a request to the verify-user-login endpoint to check if the user is authenticated

    const http = axios.create({ baseURL: "https://**********.execute-api.us-east-1.amazonaws.com/" })

    const responseStatus = await http.get("dev/verify-user-login", options)
        .then(async (response) => {

但是在执行请求之前失败并显示下一条错误消息:

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

当我尝试执行邮递员的相同请求时,效果很好。此外,当我从 Axios 执行相同的请求但在本地主机上使用 verif-user-login lambda 时,它也可以工作。

据我了解,此错误表明 SSL/TLS 配置存在问题,因此我尝试使用自定义 SSL 配置,如下所示:

const agent = new https.Agent({
  secureProtocol: 'TLSv1_2_method', // Use TLSv1.2
  ciphers: 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384', // Use multiple cipher suites
});

我希望至少能解决 SSL/TLS 的问题,但我遇到了同样的错误。

node.js http aws-lambda axios serverless-framework
2个回答
0
投票

即使尝试使用获取和自定义代理来禁用握手失败,我也会遇到相同的错误。 我正在使用节点 v18.17.1 (LTS) 和下一个 13,并且仅在使用主机标头时才会发生这种情况

 const httpsAgent = new https.Agent({
        rejectUnauthorized: false,
    });
 const response = await fetch(myApiURL,
        {
            method: 'GET',
            headers: {
                //headers
                'Content-Type': 'application/json',
                'Host': 'myapi.com',
                
            },
            agent: httpsAgent
        });

-1
投票

我最近也遇到了同样的问题。但是,使用

node:https
fetch
请求已成功完成。

© www.soinside.com 2019 - 2024. All rights reserved.