我试图从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);
});
});
您是否使用axios发送请求并得到此错误?
如果是这样,就把这看作是错误
无法验证第一个证书可能来自axios,与服务器无关。为了解决这个问题,您必须配置axios(或其他请求生成应用程序)以允许未经授权的请求。添加https。代理在请求的配置中设置rejectUnauthorized: false:
import axios from "axios"
import https from "https"
const getCities = async () => {
try {
const result = await axios.get("https://your-site/api/v1/get-cities", {
httpsAgent: new https.Agent({
rejectUnauthorized: false // set to false
})
})
console.log(result.data)
} catch(err) {
console.log(err?.message||err)
}
}
如果您正在使用自定义axios实例,则:
import axios from "axios"
import https from "https"
export const request = axios.create({
baseURL: process.env.BASE_URL,
headers: {
Authorization: cookies.YOUR_ACCESS_TOKEN,
},
httpsAgent: new https.Agent({
rejectUnauthorized: false //set to false
})
})
我们已经提供了有效的根。pem和Intermediate。返回请求对象的agentOptions属性中的pem证书
ex:
agentOptions: {
ca: [
fs.readFileSync("./ROOT.pem"),
fs.readFileSync("./Intermediate.pem"),
],
},
欲了解更多信息:https://stackoverflow.com/a/72582263/4652706
Axios Request:此问题的根本原因是,您的代码无法处理证书管理。要解决此问题,请添加以下代码。
import * as https from "https";
...
const httpsAgent = new https.Agent({
rejectUnauthorized: false,
});
//现在将httpagent传递给axios请求。像下面。
const { data } = await axios.get(url, { httpsAgent });