我正在使用无服务器框架开发一个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 的问题,但我遇到了同样的错误。
即使尝试使用获取和自定义代理来禁用握手失败,我也会遇到相同的错误。 我正在使用节点 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
});
我最近也遇到了同样的问题。但是,使用
node:https
或 fetch
请求已成功完成。