问题描述
- Axios版本:
0.20.0
- 预期行为
通话成功
- 实际行为
POST https://beta.credcoconnect.com/cc/listener net::ERR_BAD_SSL_CLIENT_AUTH_CERT
- **To Reproduce**
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> const agent = new https.Agent({ pfx: fs.readFileSync('auth/TopTierGroupLLC-10-8-20.pfx') });
$(".submitBt").click(function(e) {
axios.post('https://beta.credcoconnect.com/cc/listener',{ body: body })
.then(response => {
if (response)
{
console.log(response.status);
} else {
alert('sem resposta');
}
});
});
我只是在HTML页面中使用axios的CDN,我想向API发送请求,但它要求提供身份验证证书。该证书有效,但是我不知道如何使axios仅使用axios CDN读取此证书。
解决方法
错误实际上是表示远程证书无效,它可以“读取”该证书。 beta.credcoconnect.com上的服务器正在使用不受支持的根证书,超时的证书或最有可能是自签名证书(来自浏览器的上下文)。
这是天生不值得信赖的;尝试将新证书传递给该呼叫是没有意义的,因为这不是问题,浏览器可以针对它不信任的任何SSL证书进行协商。您需要做的是:
(推荐)将远程ssl证书更改为有效的证书,您可以完全免费地完全执行此操作,并使用LetsEncrypt(https://letsencrypt.org/)
将其自动化中间层的想法是使用具有有效证书的后端代理作为中间人,并使用该代理来调用beta.credcoconnect.com。很容易使后端调用忽略大多数语言中的SSL错误。如果您无法控制beta.credcoconnect.com主机来修复证书,这将是最好的主意。
尝试让浏览器在本地忽略SSL错误不是我可以用现代浏览器完成的事情,过去XHR对象上有一个'setOptions'可以起作用...但是我认为您应该尝试其他2个选项之一。
最后但完全不推荐。如果这是一个受控环境,其中所有客户端都由您而不是公共网站控制,那么您可以将证书添加为客户端计算机上受信任链的一部分。这通常是使用SSL进行本地主机开发的方式。