错误:无法validationnodejs中的第一个证书

我试图从一个URL从jira服务器下载文件,但我得到一个错误。 如何在代码中包含证书来validation错误:

Error: unable to verify the first certificate in nodejs at Error (native) at TLSSocket.<anonymous> (_tls_wrap.js:929:36) at TLSSocket.emit (events.js:104:17) at TLSSocket._finishInit (_tls_wrap.js:460:8) 

我的Nodejs代码:

 var https = require("https"); var fs = require('fs'); var options = { host: 'jira.example.com', path: '/secure/attachment/206906/update.xlsx' }; https.get(options, function (http_res) { var data = ""; http_res.on("data", function (chunk) { data += chunk; }); http_res.on("end", function () { var file = fs.createWriteStream("file.xlsx"); data.pipe(file); }); }); 

尝试添加适当的根证书

这总是比一味接受未经授权的终点更安全,而这只能作为最后的手段。

这可以像添加require('ssl-root-cas').inject();一样简单require('ssl-root-cas').inject(); 到你的切入点。

https://www.npmjs.com/package/ssl-root-cas

因为无法validationnodejs中的第一个证书,拒绝未授权的需要

  request({method: "GET", "rejectUnauthorized": false, "url": url, "headers" : {"Content-Type": "application/json", function(err,data,body) { }).pipe( fs.createWriteStream('file.html')); 

您尝试从中下载的服务器可能configuration错误。 即使它在浏览器中运行,也可能不包括caching空客户端需要validation的链中的所有公共证书。

我build议使用SSLlabs工具检查网站: https ://www.ssllabs.com/ssltest/

寻找这个错误:

此服务器的证书链不完整。

和这个:

连锁问题………不完整

您可以通过修改请求选项来完成此操作。 如果使用自签名证书或缺less中介,则将strictSSL设置为false将不会强制请求包validation证书。

 var options = { host: 'jira.example.com', path: '/secure/attachment/206906/update.xlsx', strictSSL: false } 

GoDaddy SSL CCertificate

在尝试使用GoDaddy证书连接到我们的后端API服务器时,我遇到过这个问题,这里是我用来解决问题的代码。

 var rootCas = require('ssl-root-cas/latest').create(); rootCas .addFile(path.join(__dirname, '../config/ssl/gd_bundle-g2-g1.crt')) ; // will work with all https requests will all libraries (ie request.js) require('https').globalAgent.options.ca = rootCas; 

PS:

使用捆绑的证书,不要忘记安装库npm install ssl-root-cas