执行https请求时出现CERT_UNTRUSTED错误

时间:2016-12-30 05:14:58

标签: node.js https node-request

我正在尝试从节点服务器端执行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.
  }
})

任何想法?

4 个答案:

答案 0 :(得分:3)

这可以归结为很多事情,我运行你的代码,对我来说很好

node --version
v0.12.5

所以我会看看

  1. 您正在使用的nodejs的版本
  2. 定期更新根证书,我建议更新,因为它可能使用的证书比您的发行版中的根证书更新,因此显示为不受信任

    1. 网络 - 您可能会在代理服务器后面执行您的请求意外事件

    2. 目标服务器,它可能会返回意外的东西。

    3. 最有可能的是1,您使用的是一个不识别网站证书提供者的nodejs版本,因此说它不受信任。

      我将2和3放在同一水平的可能性上。如果您正在抄袭维基百科,那么它们可能会阻止您/将您推送到证书可能无效的错误页面。

      虽然你可以像其他海报所建议的那样,关闭验证,但我会建议不要这样做。永远不要在生产环境中这样做。

      我违反此规则的唯一一次是本地计算机上的自签名证书。

答案 1 :(得分:0)

它看起来像是SSL问题,是修复网络环境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);
  }
});

答案 2 :(得分:0)

非常接近的答案位于here

一个非常详细的&这个问题的具体答案是here

我会推荐以下内容:

在致电https.request()之前设置:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

在座席选项中,设置:

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

另请参阅documentation for TLS/SSL of request library

答案 3 :(得分:-1)

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

npm config set strict-ssl false

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

或从https或http设置注册表URL,如下所示:

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

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

希望这有帮助。