如何在XmlHttpRequest中忽略自签名证书

10
我正在处理一个使用JavaScript编写的项目。我发现用于请求的XMLHttpRequest对象可以正常工作,但对于"https"请求则失败。由于我正在开发环境中进行调试,我想知道如何在XmlHttpRequest对象中忽略自签名证书。在搜索过程中,我找到了这个链接
httpreq = new ActiveXObject("Msxml2.ServerXMLHTTP.3.0");
httpreq.setOption(2, 13056);

但是这个答案对于像Microsoft Edge、Chrome这样的现代浏览器不起作用...
我还发现了这个页面,明确指出setOption()可以用于忽略SSL证书。
我代码中看到的一个区别是我是使用以下方式创建httpreq:
httpreq = new xmlhttprequest();//This is for chorme and Firefox

那么有没有办法在XmlHttpRequest中忽略自签名证书呢?
2个回答

3
如果您正在开发基于Chromium的浏览器,可以使用标志--ignore-certificate-errors。始终传递--user-data-dir以防止影响您的主要安全配置文件。仅在本地开发期间才使用此选项,并且仅作为最后的手段,因为它完全忽略所有SSL错误。--ignore-certificate-errors是一个未经记录的标志,随时可能从Chromium中删除。

Chromium Linux:

chromium-browser --ignore-certificate-errors --user-data-dir=~/chromium_dev_session

Chrome Windows:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --user-data-dir="c:/chrome_dev_session"

Chromium XHR test with --ignore-certificate-errors


3

坏消息:

无法直接使用XmlHttpRequest完成此操作。这是合理的,因为SSL在网络上需要保持安全性,任何禁用它的能力都会带来重大的安全风险。

您也是正确的,setOption不是XmlHttpRequest下的标准/现代方法。

好(或较好)消息:

您可以通过经过信任/正确配置的代理来完成此操作,以下示例显示了一个已配置为允许不安全SSL连接的Node/Express服务器:

$router.get("/", (oRequest, oResponse) => {
    $nonStrictSSLRequest = require('request').defaults({strictSSL: false});
    
    $nonStrictSSLRequest(
        { url: "https://192.168.1.2:8080/api/apiVer" },
        function (err, oAPIResponse, sBody) {
            oResponse.status(200).json(JSON.parse(sBody));
        }
    );
});

我必须这样做来支持RainMachine的(愚蠢的仅支持HTTPS的)自签名证书

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