我正在尝试使用axios在我的反应应用程序中使用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;
有没有办法禁用证书验证?
答案 0 :(得分:1)
首先,原因错误不在您的代码上。这是因为浏览器的安全性受到限制。默认情况下,浏览器将阻止自签名请求,因为它不是来自有效证书颁发机构(CA)的证书。
要么从CA升级SSL证书,要么需要在浏览器中禁用网络安全性。
例如对于chrome,请从cmd行args开始,如下所示
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --disable-gpu --user-data-dir=~/chromeTemp
答案 1 :(得分:0)
这是拥有自签名和接受的localhost证书的方法。基本上,您会生成证书并将其手动添加到Chrome中,然后再使用。
“让我们加密:https://letsencrypt.org/docs/certificates-for-localhost/指导”(似乎有点高级)。
也有此答案,它说明了如何在您访问站点时添加证书:https://stackoverflow.com/a/18602774
答案 2 :(得分:-1)
您始终可以使用Let's Encrypt来获取签名的SSL证书并在Web服务器上使用它。 据我所知(如果我错了,请纠正我)是当存在自签名SSL证书时,Chrome Web浏览器阻止您访问请求的资源。它与Axios无关。
答案 3 :(得分:-2)
仅出于发展目的
您可以暂时禁用Google Chrome浏览器的网络安全。但这不是永久性的解决方案:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --disable-gpu --user-data-dir=~/chromeTemp
或者您可以转到chrome:// flags并为从本地主机加载的资源启用允许无效证书。
编辑:
对不起,看来我误解了你的问题。如果您在开发条件下工作,并且生产中的证书问题将得到解决,则以上答案仅对开发有效。
但是通常,您无法避免错误,因为这种类型的连接将不安全,并且中间数据可能会被替换或被盗,此外,浏览器将阻止响应,在这种情况下与javascript无关