Как настроить модуль «https-proxy» node.js, HTTPS - HTTPS, с самозаверяющими сертификатами? - PullRequest
0 голосов
/ 24 июня 2019

Модуль '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.* являются самозаверяющими сертификатами, но я не смог правильно их настроить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...