执行https请求时出现CERT_UNTRUSTED错误

我试图从我的节点服务器端执行https request ,但它给我以下错误: –

 Caught exception: Error: CERT_UNTRUSTED 

如果我执行http request那么它工作正常,但对于https 链接 它不工作

这是我的代码:

 var request = require('request'); request('https://en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Show the HTML for the Google homepage. } }) 

任何想法?

这可能是一些事情,我已经运行你的代码,并罚款给我

 node --version v0.12.5 

所以我会看

  1. 您正在使用的nodejs的版本

定期更新根证书,我会build议更新,因为它可能是使用的证书比你的发行版中的根证书更新,因此显示为不可信

  1. networking – 它可能是你在一个代理服务器,你的请求做了一些意想不到的事情

  2. 目标服务器,它可能会返回一些意想不到的事情。

最有可能的是1,你使用的Nodejs的版本不承authentication书提供商的网站,因此说,它的不可信。

我会把2和3放在相同的水平上。 如果您正在search维基百科,则可能是他们阻止了您/将您推送到证书可能无效的错误页面。

虽然你可以像其他海报所build议的那样,closuresvalidation,但我build议不要把它当作一种习惯。 而不要在生产环境中进行。

我唯一一次违反这个规则的是本地机器上的自签名证书。

它看起来像一个SSL问题,最好的方法来修复networking环境的SSL。


现在,你可以通过将rejectUnauthorized设为false来绕过问题

 const request = require("request"); const https = require('https'); const agentOptions = { host: 'en.m.wikipedia.org', port: '443', path: '/wiki/Astrid_Olofsdotter_of_Sweden', rejectUnauthorized: false }; const agent = new https.Agent(agentOptions); const postOption = { method: 'GET', agent: agent, uri: 'https://en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden' }; request(postOption, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); } }); 

一个非常接近的答案在这里 。

这里给出一个非常详细和具体的答案。

我会build议如下:

在调用https.request()之前设置:

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 

在代理选项中,设置:

 const agentOptions = { ... rejectUnauthorized: false }; 

另请参阅请求库的TLS / SSL文档 。

您可以使用以下命令绕过https:

 npm config set strict-ssl false 

设置strict-ssl false允许所有节点服务器访问任何URL。

或从https或http设置registryURL,如下所示:

 npm config set registry="http://registry.npmjs.org/" 

注意:但是,我个人认为绕过https不是真正的解决scheme,但我们可以使用它作为解决方法。

希望这可以帮助。