我正在集成API(Rails和Node.js),当我的客户端从他的浏览器向node.js / express服务器发出请求时,我需要将来自node.js的请求发送到一个或多个Rails API 。但是当我尝试验证那些Rails API时,axios抛出UNABLE_TO_VERIFY_LEAF_SIGNATURE
所有API都在同一个EC2实例中,在nginx反向代理后面工作,该代理在不同的端口中处理它们,它们都在同一个域中,并且具有相同的公共证书,这在浏览器上可以正常工作。
A尝试过:
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
这有效,但不安全!
var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject()
没用
require('ssl-root-cas/latest')
.addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');
此代码适用于https客户端(My Node.js API),对吗? 该文件应该是我的服务器证书吗?如果这样不起作用
const instance = axios.create({
baseURL: 'https://baseurl.com',
httpsAgent: new https.Agent({
ca: fs.readFileSync(`${path}CA.pem`),
cert: fs.readFileSync(`${path}CERT.pem`),
key: fs.readFileSync(`${path}KEY.pem`)
})
});
再次,那些pem文件应该是我的服务器证书中的我的文件吗? 我只有一个钥匙和一个证书,我想从那里获取CA.pem?
那是我正在处理的代码:
let credentials = {
email: email,
password: password
};
try {
let auth_res;
let res = [];
for (let i = 0, items = iter$(this.urls()), len = items.length; i < len; i++) {
let options = {
url: ("" + items[i] + "/login"),
method: 'POST',
data: credentials
};
if (process.env.NODE_ENV == 'production') {
options.httpsAgent = new (https.Agent)({
cert: fs.readFileSync("/home/ubuntu/certs/server.crt"),
key: fs.readFileSync("/home/ubuntu/certs/server.key")
});
};
res.push(await axios(options));
};
auth_res = res;
let res1 = [];
for (let i = 0, items = iter$(auth_res), len = items.length; i < len; i++) {
res1.push(items[i].headers);
};
return (this.setAuth_headers(res1),res1);
} catch (err) {
console.log(err);
return this.res().status(500).send({errors: err});
};