SSL证书 - 在axios和react中禁用验证

25

我正在尝试使用axios在我的React应用程序中调用API。该API通过自签名证书的HTTPS进行工作。目前,当连接时,我收到以下错误:

net::ERR_INSECURE_RESPONSE
bundle.js:65253 HTTP Failure in Axios Error: Network Error
    at createError (bundle.js:2188)
    at XMLHttpRequest.handleError (bundle.js:1717)

我尝试了下面的方法,但没有成功:

import axios from 'axios';

const https = require('https');

const agent = new https.Agent({
    rejectUnauthorized: false,
});

const client = axios.create({ //all axios can be used, shown in axios documentation
    baseURL: process.env.REACT_APP_API_URL,
    responseType: 'json',
    withCredentials: true,
    httpsAgent: agent
});

export default client;

有没有办法禁用证书验证?


这个问题和答案有些类似:https://dev59.com/e6bja4cB1Zd3GeqPd0r4。不过那里使用的NPM包略有不同。希望这可以帮到你! - Philippe Sultan
3
由于浏览器开发者(谷歌、苹果、微软、Mozilla、Brave和Opera)很久以前就决定不再支持此功能,因此这是不可能的。你唯一能做的就是去获取一个免费的SSL证书(但需要拥有一个域名或子域名来申请)。 - slebetman
1
为了实现无缝体验,你可以尝试构建自己的代理服务器,同时暴露相同的服务集合,但需使用有效证书。服务器端运行的代理服务器将无法访问另一个具有无效证书的服务。 - Wiktor Zychla
3个回答

7

这些答案似乎都没有真正回答问题。问题不是如何自签名证书或如何在浏览器中禁用安全性。问题是:具体来说,使用axios如何禁用SSL验证?

这应该与向cURL命令添加-k--insecure标志相同。如果您可以使用cURL完成它,那么使用axios也应该是可能的。

请注意,这并不会禁用加密,因为如果您正确设置了https,则服务器仍然控制着加密。它只是禁用了检查您是否正在与正确的服务器通信。

无论如何,在我的情况下,我通过更改以下内容解决了这个问题:

const agent = new https.Agent({
    rejectUnauthorized: false,
});

to

const agent = new https.Agent({
   rejectUnauthorized: false,
   requestCert: false,
   agent: false,
});

根据Philippe Sultan提供的类似问题的答案,我并不明白每个选项的具体含义。如果有人能在评论中回答,那就太好了。


1
这在一个Node项目中非常好用。然而,问题是如何在React项目中使其工作。Node的HTTPS代理将不可用。 - LittleChewbacca
@LittleChewbacca 这在我的React项目中有效。我的项目没有任何节点。在React中,你可以使用"const https = require('https');",你也可以在提问的代码中看到这一点。 - Frikster
2
当我尝试这样做时; `重大变更:webpack < 5 默认情况下会包含对node.js核心模块的polyfills。 现在不再是这样了。请验证您是否需要此模块,并为其配置一个polyfill。如果您想要包含一个polyfill,您需要:
  • 添加一个回退选项 'resolve.fallback: { "https": require.resolve("https-browserify") }'
  • 安装 'https-browserify' 如果您不想包含一个polyfill,您可以使用一个空模块,如下所示: resolve.fallback: { "https": false }` 发生错误
- Emin Berkay Dağlar

1

0

首先,错误的原因不在于您的代码。而是因为浏览器上的安全限制。默认情况下,浏览器会阻止对自签名证书的请求,因为它不是来自有效证书颁发机构(CA)的证书。

要么从CA升级SSL证书,要么需要在浏览器中禁用Web安全性。

例如,对于Chrome,可以使用以下命令行参数启动:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --disable-gpu --user-data-dir=~/chromeTemp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接