服务器上的节点获取请求失败:无法获取本地颁发者证书

时间:2018-08-24 00:21:58

标签: node.js express ssl node-fetch

〜我正在使用Node 10.9.0和npm 6.2.0〜

我正在运行以下应用,该应用使我可以通过httphttps向同一站点发出请求。

var fetch = require('node-fetch')
const express = require('express')
const app = express()

//-- HTTP --
app.get('/test-no-ssl', function(req, res){
  fetch('http://jsonplaceholder.typicode.com/users')
  .then(res => res.json())
  .then(users => {
    res.send(users)
  }).catch(function(error) {
    res.send(error)
  })
})

//-- HTTPS --
app.get('/test-ssl', function(req, res){
  fetch('https://jsonplaceholder.typicode.com/users')
  .then(res => res.json())
  .then(users => {
    res.send(users)
  }).catch(function(error) {
    res.send(error)
  })
})

app.listen(3003, () => 
  console.log('Listening on port 3003...')
)

这两种方法在我的本地机器上都能正常工作,并返回Typicode提供的JSON响应。但是,当我将它们作为Node应用程序部署到Web主机(FastComet)上时,会得到以下结果:

HTTP /test-no-ssl-按预期返回JSON

HTTPS /test-ssl-返回以下错误:

{ 
  "message" : "request to https://jsonplaceholder.typicode.com/users failed, reason: unable to get local issuer certificate",
  "type" : "system",
  "errno" : "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
  "code" : "UNABLE_TO_GET_ISSUER_CERT_LOCALLY"
}

我搜索了此错误,并尝试了一些常规修复程序,但没有任何帮助。

这些无效:

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

npm set strict-ssl=false

是否有其他人在共享托管提供程序(支持Node)上遇到此问题并能够使其正常工作?也许甚至有人使用FastComet?主持人的支持人员似乎也不知道该怎么办,所以我很茫然。

2 个答案:

答案 0 :(得分:4)

尝试使用以下内容:

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0

答案 1 :(得分:0)

托管可能与证书颁发机构列表有关……作为一种变通办法,您可以尝试忽略证书的有效性。

select

注意:这具有安全隐患,使https和http一样不安全。