使用pfx https证书的Axios CDN

问题描述

  • 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进行本地主机开发的方式。