[编辑]:下面有一个答案
尝试使用axios(of fetch)从react调用我的节点https后端......自签名证书总是遇到错误。可以通过在启动react应用程序时设置NODE_TLS_REJECT_UNAUTHORIZED=0
来“绕过”REJECT_UNAUTORIZED错误,但这显然不是解决方案。我还遇到了不同的消息,如ERR_CERT_COMMON_NAME_INVALID。
值得一提的是,当使用postman时,当激活证书验证并在postman中上传我的自签名CA PEM证书时,一切都运行良好。我试图在chrome中做同样的事情(在根CA商店中上传自签名CA PEM证书),但没有运气。仍然是警告...
当然,我尝试了添加https代理的解决方案(请参见下面的代码),但这也没有解决问题。该解决方案似乎适用于节点应用程序,但不适用于React或任何其他语言的前端应用程序。
那么解决方案是什么呢?我们怎样才能从react请求一个本地自签名的https后端服务器而不发出这些警告呢?这里或axios github中报告了数百万个类似的问题,但仍然没有可行的解决方案?
谢谢
axios.defaults.httpsAgent = new https.Agent({
rejectUnauthorized: false,
port: 443,
});
const tokensData = await axios.post<TLoginApi, AxiosResponse<TLoginApi, any>, TLoginDTO>(
`${process.env.AUTH_URL}/login`,
credentials,
{
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
// or this but failed anyway httpsAgent: new https.Agent({
rejectUnauthorized: false,
port: 443,
}),
}
);
1条答案
按热度按时间w41d8nur1#
回答我自己的问题。为了避免使用
NODE_TLS_REJECT_UNAUTHORIZED=0
,你需要创建你的自签名证书。我所面临的主要问题与本地主机和谷歌 chrome 有关(至少版本108),因为我的测试后端是在同一台开发机器上。我想出了一个解决方案来生成自签名证书,这对域为“localhost”的Google Chrome浏览器来说是可以的。您需要添加一个扩展文件,添加一些DNS和“localhost”的IP地址(IP 4 & IP 6)。同样重要的是在Chrome中导入您的根CA,以避免拒绝未经授权的...创建CA和证书的步骤
server-ext.conf文件示例,该文件可防止Chrome抱怨DNS错误或任何其他情况
我可以找到更多关于这个扩展文件HERE的信息
最后,在BACKEND上,您可以使用根CA和证书/密钥配置nodejs Express服务器: