2016-12-30 70 views
5

我想从我的节点服务器端执行https request,但它给我以下错误: -当执行HTTPS请求CERT_UNTRUSTED错误

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. 
    } 
}) 

任何想法?

+0

也许你应该检查你的网络环境? 我运行你的代码,工作正常。 – bananaappletw

+0

如何检查网络环境。代码在本地工作正常,但不在生产上。我正在面对https://en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden这样的wikipidea网址问题 –

+0

你能看见生产环境的控制台日志吗?可能试图打印出错误日志'console.log(error)' – bananaappletw

回答

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); 
    } 
}); 
-1

您可以使用下面绕过HTTPS命令:

npm config set strict-ssl false 

设置严格的SSL假允许所有的节点服务器访问任何网址。

或设置从https或http像下面的注册表网址:

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

注:不过,我个人相信绕过HTTPS是不是真正的解决方案,但我们可以把它作为一个解决办法。

希望这会有所帮助。

+1

不使用SSL根据你的笔记,这个问题并不是真正的答案,正如你所知道的那样。据推测,阿伦希望SSL在他们的应用程序中工作。此外,在对这个问题的评论中,arun表示在为选项添加strictSSL:false后,错误仍然存​​在。 – regdoug

3

这可能是下降到了一些东西,我已经运行您的代码和它的罚款,我

node --version 
v0.12.5 

所以我想看看

  1. 您使用
  2. 的的NodeJS的版本

定期根证书更新,我会建议更新,因为它可能被所使用的证书比在分发的根证书更新d因此被显示为不信任

  • 网络 - 它可能是因为你的背后一个代理,做了意想不到您的要求

  • 目标服务器,它可以被返回意外的事情。

  • 最有可能的是1,您正在使用一个版本,这并不承认该网站的证书提供商,因此中的NodeJS说,它的不信任。

    我会把2和3放在相同的可能性水平。如果您正在搜索维基百科,它可能会阻止您/将您推送到证书可能无效的错误页面。

    虽然您可以像其他海报所建议的那样关闭验证,但我会建议您不要将其视为习惯。并且从不在生产环境中进行。

    我违反此规则的唯一时间是本地机器上的自签名证书。

    0

    非常接近的答案位于here

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

    我想提出以下建议:

    在致电https.request()集:

    process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 
    

    在代理选项,设置:

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

    此外,参考documentation for TLS/SSL of request library