NodeJS http-proxy: ошибка DEPTH_ZERO_SELF_SIGNED_CERT при проксировании https

Я следую онлайн-примерам, используя последнюю версию 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, но безрезультатно.


person IainS    schedule 22.07.2014    source источник


Ответы (6)


Я использую Ant design proс umi. просто добавьте это secure: false, к proxy.ts

proxy: {
  '/myapi': {
      target: 'https://localhost:8443',
      changeOrigin: true,
      secure: false, // 不进行证书验证
    },

umi автоматически перезагрузит конфигурацию, просто обновите браузер и все в порядке.

person King.    schedule 02.11.2020

Попробуйте передать {rejectUnauthorized: false} в httpProxy.createProxyServer()

person Nitzan Shaked    schedule 22.07.2014
comment
спасибо, я попробовал, но это не помогло. Я думаю, что в этом пакете node-http-proxy должна быть ошибка, поэтому ищите альтернативы. - person IainS; 23.07.2014
comment
Не работает в proxy.conf.js Angular, но спасибо. - person Jeb50; 29.06.2021

В Nuxt.js при подключении к API с самозаверяющим сертификатом добавление этой записи в .env исправит ошибку «DEPTH_ZERO_SELF_SIGNED_CERT».

NODE_TLS_REJECT_UNAUTHORIZED=0

person Rhys    schedule 12.02.2020

У меня была та же проблема - если вы посмотрите на источник http-node-proxy, вы увидите, что он фактически устанавливает rejectUnauthorized на основе вашей настройки secure в параметрах:

if (options[forward || 'target'].protocol == 'https:') { outgoing.rejectUnauthorized = (typeof options.secure === "undefined") ? true : options.secure; }

Таким образом, вы можете легко установить rejectUnauthorized в false, просто передав secure: false в своем вызове httpProxy.createProxyServer.

person BlueMoon    schedule 19.09.2014
comment
В ОП особо упоминается, что он работает, когда установлено secure: false. Но они, вероятно, хотят, чтобы это работало безопасно. - person kvetis; 06.03.2019

простой способ - просто добавить это в свой код,

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

это решило мою проблему

person Luis    schedule 23.07.2015

реагировать создать приложение

файл package.json

``` "прокси": {

"/credit": {
  "target": "https://xxxx.com",
  "changeOrigin": true,
  "secure": false
}

} ```

person 李盛根    schedule 02.08.2017
comment
Пожалуйста, ознакомьтесь с этим первым инструкцией по ответу. - person ankit suthar; 02.08.2017