我试图从jira服务器下载一个文件使用URL,但我得到一个错误。
如何在代码中包含证书进行验证?
错误:
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);
});
});
我们已经提供了有效的根。pem和Intermediate。返回请求对象的agentOptions属性中的pem证书
ex:
agentOptions: {
ca: [
fs.readFileSync("./ROOT.pem"),
fs.readFileSync("./Intermediate.pem"),
],
},
欲了解更多信息:https://stackoverflow.com/a/72582263/4652706
这为我工作=>添加代理和'rejectUnauthorized'设置为false
const https = require('https'); //Add This
const bindingGridData = async () => {
const url = `your URL-Here`;
const request = new Request(url, {
method: 'GET',
headers: new Headers({
Authorization: `Your Token If Any`,
'Content-Type': 'application/json',
}),
//Add The Below
agent: new https.Agent({
rejectUnauthorized: false,
}),
});
return await fetch(request)
.then((response: any) => {
return response.json();
})
.then((response: any) => {
console.log('response is', response);
return response;
})
.catch((err: any) => {
console.log('This is Error', err);
return;
});
};
对于无法验证nodejs中的第一个证书,需要拒绝未经授权的证书
request({method: "GET",
"rejectUnauthorized": false,
"url": url,
"headers" : {"Content-Type": "application/json",
function(err,data,body) {
}).pipe(
fs.createWriteStream('file.html'));
解决这个问题的另一种方法是使用下面的模块。
node_extra_ca_certs_mozilla_bundle
该模块无需任何代码修改,即可生成包含Mozilla信任的所有根证书和中间证书的PEM文件。您可以使用以下环境变量(适用于Nodejs v7.3+),
NODE_EXTRA_CA_CERTS
生成与上述环境变量一起使用的PEM文件。你可以使用以下方法安装模块:
npm install --save node_extra_ca_certs_mozilla_bundle
然后使用环境变量启动节点脚本。
NODE_EXTRA_CA_CERTS=node_modules/node_extra_ca_certs_mozilla_bundle/ca_bundle/ca_intermediate_root_bundle.pem node your_script.js
使用生成的PEM文件的其他方法如下:
https://github.com/arvind-agarwal/node_extra_ca_certs_mozilla_bundle
注:我是上述模块的作者。