在 Node.js 中卷曲到 Axios - 使用提供的证书实现工作卷曲请求时出现问题 - ECONNRESET / 套接字挂起错误

Curl to Axios in Node.js - Problem with implementing working curl request with provided certificates - ECONNRESET / Socket hang up error

我一直在尝试在 Axios (Node.js) 中实现有效的 curl 请求,但没有成功。

工作的 curl 请求看起来像这样(我无法分享确切的请求,因为 API 是私有的):

curl --cacert server.pem --cert client.pem:123password456 -i -H "accept:application/json" -H "content-Type:application/json" "https://example.endpoint.com/"

所以我有这两个文件,服务器证书server.pem 和客户端证书client.pem,密码123password456。当我 运行 这个 curl 请求时,我得到成功的响应(200 OK)。但是,我在 Node.js 中的 Axios 实现并非如此。 我在节点中的 axios 请求如下所示:

const axios = require("axios");
const https = require("https");
const fs = require("fs");

const httpsAgent = new https.Agent({
    cert: fs.readFileSync("./client.pem"),
    passphrase: "123password456",
    ca: fs.readFileSync("./server.pem"),
    rejectUnauthorized: false
});

const axiosInstance = axios.create({
    httpsAgent: httpsAgent
});

// Error on following line called in async function
let response = await axiosInstance.get("https://example.endpoint.com/");

当我在 Node 中 运行 上面的代码时,它立即抛出 Axios 错误:

Error: socket hang up\n at connResetException (node:internal/errors:691:14)...
Error object:
{
  code:'ECONNRESET'
  message:'socket hang up'
  isAxiosError:true
  ...
}

我已经尝试过各种编辑(例如不使用 axios 实例并且仅使用 axios 对象)。非常感谢您的帮助

我已设法自行解决问题。检查证书文件后,我发现提供的客户端证书文件 client.pem 包含客户端证书和私钥。使用https模块创建的https代理需要私钥单独指定为key,修改后的httpsAgent应该是这样的:

const httpsAgent = new https.Agent({
    cert: fs.readFileSync("./client.pem"),
    key: fs.readFileSync("./key.pem"),
    passphrase: "123password456",
    ca: fs.readFileSync("./server.pem"),
    rejectUnauthorized: false
});