执行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
所以我会看
- 您正在使用的nodejs的版本
定期更新根证书,我会build议更新,因为它可能是使用的证书比你的发行版中的根证书更新,因此显示为不可信
-
networking – 它可能是你在一个代理服务器,你的请求做了一些意想不到的事情
-
目标服务器,它可能会返回一些意想不到的事情。
最有可能的是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,但我们可以使用它作为解决方法。
希望这可以帮助。