NodeJS Express反向代理TLS_CERT_ALTNAME_INVALID错误

4
我在我的端点上有一个反向代理,就像这样:
var express = require('express');
var app = express();
var httpProxy = require('http-proxy');
var apiProxy = httpProxy.createProxyServer();
var serverOne = 'https://idena.navarra.es/ogc/wms?';

app.all('/idena', function (req, res) {
  apiProxy.web(req, res, {target: serverOne});
});

app.listen(3000, function () {
  console.log('Working!');
});

当收到对/idena的请求时,服务器会抛出以下异常:

Error [ERR_TLS_CERT_ALTNAME_INVALID]: 主机名/IP不匹配证书的备用名称:主机名:localhost不在证书的备用名称中:DNS:idena.navarra.es, DNS:www.idena.navarra.es at Object.checkServerIdentity (tls.js:235:17) at TLSSocket.onConnectSecure (_tls_wrap.js:1061:27) at TLSSocket.emit (events.js:189:13) at TLSSocket._finishInit (_tls_wrap.js:633:8)

如何解决这个问题呢?猜测可能是由于使用了https导致的,但不知道如何避免,谢谢!

使用此软件包检查如何使用 HTTPS:[https://www.npmjs.com/package/http-proxy#using-https] - codtex
可能是Node.js主机名/IP与证书的altnames不匹配的重复问题。 - Charlie
1个回答

12

尽管错误与SSL证书和域名不匹配有关,在http-proxy模块中,当您的服务器为HTTP而目标为HTTPS时,该错误经常会表现出来。

您可以通过更改changeOrigin标志来避免此错误。

const proxy = httpProxy.createProxyServer();

proxy.web(req, res, {
  changeOrigin: true,
  target: https://example.com:3000,
});

如果您的服务器是HTTPS,目标服务器也是HTTPS,那么您应该包含SSL证书。

httpProxy.createServer({
  ssl: {
    key: fs.readFileSync('valid-ssl-key.pem', 'utf8'),
    cert: fs.readFileSync('valid-ssl-cert.pem', 'utf8')
  },
  target: 'https://example.com:3000',
  secure: true
}).listen(443);
请查看问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接