Модуль 'https-proxy' node.js не может переслать запрос от прокси-сервера HTTPS на рабочий сервер HTTPS, когда оба сервера используют самозаверяющие сертификаты. Прокси-сервер сообщает об ошибке:
...node_modules/http-proxy/lib/http-proxy/index.js:120
throw err;
^
Error: self signed certificate in certificate chain
at TLSSocket.<anonymous> (_tls_wrap.js:1105:38)
at emitNone (events.js:106:13)
at TLSSocket.emit (events.js:208:7)
at TLSSocket._finishInit (_tls_wrap.js:639:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:469:38)
Поиск переполнения стека, я пробовал process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
до httpProxy.createProxyServer
на прокси-сервере HTTPS и до https.createServer
на рабочем сервере HTTPS, но это не имело никакого значения.
Мой прокси-сервер HTTPS реализован так:
const httpProxy = require('http-proxy');
const fs = require('fs')
const log = require('log');
const Configuration = require('../configuration/cfg')
require("log-aws-lambda")();
const target = 'https://' + Configuration.work.host + ':' + Configuration.work.port
log.debug("target = %s", target)
httpProxy.createProxyServer({
ssl: {
cert: fs.readFileSync(Configuration.proxy.crt),
key: fs.readFileSync(Configuration.proxy.key),
ca: fs.readFileSync(Configuration.proxy.ca)
}
, target: target
, secure: true
}).listen(Configuration.proxy.port, function(err) {
if (err) {
log.error("ERROR: %s", err)
}
else {
log.notice("Proxy started on port %d", Configuration.proxy.port);
}
});
А мой рабочий сервер HTTPS реализован так:
var https = require('https')
const express = require('express');
const app = express();
const Configuration = require('../configuration/cfg');
const bodyParser = require('body-parser');
const fs = require('fs')
const log = require('log');
require("log-aws-lambda")();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.get('/', function (req, res) {
res.send('hello world')
})
https.createServer({
cert: fs.readFileSync(Configuration.work.crt),
key: fs.readFileSync(Configuration.work.key),
ca: fs.readFileSync(Configuration.work.ca)
}, app)
.listen(Configuration.work.port, function (err) {
if (err) {
log.error("ERROR: %s", err)
}
else {
log.notice('Work listening on port %d', Configuration.work.port)
}
});
Согласно сообщению об ошибке, проблема в том, что Configuration.work.*
и Configuration.proxy.*
являются самозаверяющими сертификатами, но я не смог правильно их настроить