我正在使用最新版本的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,但无济于事。
答案 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 pro
与umi
一起使用。
只需将此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)
``` &#34;代理&#34;:{
"/credit": {
"target": "https://xxxx.com",
"changeOrigin": true,
"secure": false
}
} ```