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

我正在使用最新版本的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的禁止响应发回。 我使用的证书和密码是来自我的端点服务器的证书和密码,而且我直接发送请求时testing了它们的工作。 我希望我的代理所做的是检查请求的内容,为每个请求logging一条消息,然后转发到端点服务器。

我GOOGLE了这个问题,并尝试与代理和strictSSL摆弄,但无济于事。

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

我有同样的问题 – 如果你看看http-node-proxy源,你会看到它实际上设置rejectUnauthorized基于您的secure设置的选项:

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

所以你可以通过在httpProxy.createProxyServer中调用secure: false来轻松设置rejectUnauthorizedfalse

简单的方法就是在你的代码中添加这个,

process.env.NODE_TLS_REJECT_UNAUTHORIZED =“0”;

这解决了我的问题

反应创build应用

文件package.json

“`“proxy”:{

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

}“