javascript - NodeJS Express 反向代理 TLS_CERT_ALTNAME_INVALID 错误

标签 javascript node.js express ssl http-proxy

我的端点上有一个反向代理,如下所示:

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]: Hostname/IP does not match certificate's altnames: Host: localhost. is not in the cert's altnames: 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 但不知道如何避免,谢谢!

最佳答案

虽然是SSL证书和域名不匹配的错误,但是在http-proxy模块中,当你的server是HTTP,Target是HTTPS时,这个错误经常出现。

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

const proxy = httpProxy.createProxyServer();

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

In case your server is HTTPS and target one is HTTPS as well, you should include SSL certificate

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);

请参阅this问题。

关于javascript - NodeJS Express 反向代理 TLS_CERT_ALTNAME_INVALID 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766108/

相关文章:

javascript - 使用 EJS 表达 - 呈现函数调用?

javascript - 回流/重绘问题?优化太慢的应用程序

javascript - 无法为 HTML 中的特定 DIV 添加背景图像

javascript - 如何找到调用函数的位置(函数调用堆栈)

node.js - 使用 nodejs 在单个请求上解决多个 Azure 服务总线消息

javascript - 从 Node Express api 返回大型 json 响应

node.js - 如何在expressjs中调用另一个api?

JavaScript 递增变量

javascript - Eslint:如何在 Node.js 中禁用 "unexpected console statement"?

node.js - 如何在node和mongodb中查找?