代理https时,NodeJS http-proxy:DEPTH_ZERO_SELF_SIGNED_CERT错误

时间:2014-07-22 12:44:28

标签: node.js https http-proxy

我正在使用最新版本的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,但无济于事。

6 个答案:

答案 0 :(得分:0)

尝试将{rejectUnauthorized: false}传递给httpProxy.createProxyServer()

答案 1 :(得分:0)

在Nuxt.js中,使用自签名证书连接到API时,将此条目添加到.env将修复“ DEPTH_ZERO_SELF_SIGNED_CERT”错误。

NODE_TLS_REJECT_UNAUTHORIZED=0

答案 2 :(得分:0)

我将Ant design proumi一起使用。 只需将此secure: false,添加到proxy.ts

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

umi会自动重新加载配置,只需刷新浏览器即可。

答案 3 :(得分:-1)

我遇到了同样的问题 - 如果您查看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

答案 4 :(得分:-1)

简单的方法就是在代码中添加它,

process.env.NODE_TLS_REJECT_UNAUTHORIZED =&#34; 0&#34;;

解决了我的问题

答案 5 :(得分:-2)

反应创建应用

file package.json

``` &#34;代理&#34;:{

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

} ```