gpt4 book ai didi

node.js - 如何配置axios使用SSL证书?

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:36 25 4
gpt4 key购买 nike

我正在尝试使用 axios 向 api 端点发出请求,但出现以下错误:错误:无法验证第一个证书

看来 axios 使用的 https 模块无法验证服务器上使用的 SSL 证书。

当我用浏览器访问服务器时,证书是有效的,我可以看到/下载它。我也可以通过 https 向我的浏览器上的 api 发出请求。

我可以通过关闭验证来解决这个问题。此代码有效。

const result = await axios.post(
`https://${url}/login`,
body,
{
httpsAgent: new https.Agent({
rejectUnauthorized: false
})
}
)

问题是,这不会验证 SSL 证书,因此会打开安全漏洞。

如何配置 axios 来信任证书并正确验证它?

最佳答案

老问题,但为那些登陆这里的人插话。没有专家。请咨询您本地的安全专家等等。

Axios 是一个 http(s) 客户端,http 客户端通常匿名参与 TLS。换句话说,服务器接受他们的连接而不识别谁在尝试连接。这与 Mutual TLS 不同,其中服务器和客户端在完成握手之前相互验证。

互联网是一个可怕的地方,我们希望保护我们的客户免于连接到欺骗性的公共(public)端点。我们通过确保我们的客户在发送任何私有(private)数据之前识别服务器来做到这一点。

// DO NOT DO THIS IF SHARING PRIVATE DATA WITH SERVICE
const httpsAgent = new https.Agent({ rejectUnauthorized: false });

这通常作为 StackOverflow 上关于任何语言的 https 客户端连接失败的答案发布(并且更令人震惊地投票)。更糟糕的是,它通常可以正常工作,解除对开发人员的阻碍,他们可以继续他们的快乐之路。然而,他们肯定进了门,那是谁的门?由于他们选择不验证服务器的身份,他们可怜的客户无法知道他们刚刚与公司内联网建立的连接是否有坏人在线监听。

如果服务有公共(public) SSL 证书,https.Agent 通常不需要进一步配置,因为您的操作系统提供了一组公共(public)的公共(public)可信 CA 证书。这通常是您的浏览器配置使用的同一组 CA 证书,这就是默认 axios 客户端可以点击 https://google.com 的原因。一点点大惊小怪。

如果服务有私有(private) SSL 证书(出于测试目的自签名或由贵公司的私有(private) CA 签名以保护其内部 secret ),必须将 https 代理配置为信任用于签署服务器证书的私有(private) CA:

const httpsAgent = new https.Agent({ ca: MY_CA_BUNDLE });

其中 MY_CA_BUNDLE 是一组 CA 证书,其中包含您要访问的端点的服务器证书和该证书的完整证书链,格式为 .pem。您必须包括链中的所有证书,直至信任根。


这些选项记录在哪里?

HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a separate module.

因此传递给 https.Agent 的选项是传递给 tls.connect() 的选项的合并和 tls.createSecureContext() .

关于node.js - 如何配置axios使用SSL证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51363855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com