错误:无法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();
到你的切入点。
因为无法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