Я следую онлайн-примерам, используя последнюю версию nodejs и http-proxy, но получаю следующую ошибку, когда мой запрос отправляется на https-сервер конечной точки:
C:\Users\Me\node_modules\http-proxy\lib\http-proxy\index.js:114
throw err;
Error: DEPTH_ZERO_SELF_SIGNED_CERT
at SecurePair.<anonymous> (tls.js:1370:32)
at SecurePair.EventEmitter.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:982:10)
at CleartextStream.read [as _read] (tls.js:469:13)
at CleartextStream.Readable.read (_stream_readable.js:320:10)
at EncryptedStream.write [as _write] (tls.js:366:25)
at doWrite (_stream_writable.js:226:10)
at writeOrBuffer (_stream_writable.js:216:5)
at EncryptedStream.Writable.write (_stream_writable.js:183:11)
at write (_stream_readable.js:582:24)
Мой код очень прост:
var httpProxy = require('http-proxy');
var http = require('http');
var fs = require('fs');
var apimcert = fs.readFileSync('./mycert.pfx');
var proxy = httpProxy.createProxyServer({});
var options = {
pfx: apimcert,
passphrase : 'pAssw0rd',
rejectUnauthorized : 'false',
agent: false
};
var server = require('https').createServer(options, function(req, res) {
console.log("Got a request " + req);
proxy.web(req, res, {
ssl: {
pfx : apimcert,
passphrase : 'pAssw0rd',
rejectUnauthorized : 'false'
//strictSSL: false
},
target: 'https://endpointhost:9443/postev',
secure: true
}
);
});
console.log("listening on port 9442")
server.listen(9442);
Если я устанавливаю secure : false
, то запрос перенаправляется на конечную точку, но, очевидно, отправляется обратно с запрещенным ответом 403. Сертификат и фраза-пароль, которые я использую, взяты с моего конечного сервера, и я проверил, что они работают при прямой отправке запроса. Все, что я хочу, чтобы мой прокси делал, это проверял содержимое запросов, регистрировал сообщение для каждого из них, а затем пересылал на сервер конечной точки.
Я гуглил эту проблему и пытался возиться с агентами и strictSSL, но безрезультатно.