node.js - 如何让 Node.js/Express.js 在 ssl 验证之前拒绝基于 vhost 的连接

标签 node.js ssl express

我的设置是这样的:

[Apache running on port 80]
http://domain1/  --->   https://domain1/   (redirect using apache)
http://domain2/  --->   Hosted on apache.

[Nodejs running on port 443]
https://domain1/ --->   App on Express.js/Node.js

我现在想要的是对 https://domain2/ 的任何请求应该拒绝连接。

我的 ssl 证书只对 domain1 有效。所以,我不能做这样的事情:

var vhostController = express.createServer({key:privateKey,cert:certificate});
vhostController.use(express.vhost('domain1',mainApp));
vhostController.use(express.vhost('domain2',function(req, res) {res.end();}));
vhostController.listen(443);

上面的代码适用于 http,但不适用于 https,因为它会在传递给处理返回内容的函数之前尝试验证服务器证书。

那么,有没有办法在证书错误之前检查请求是针对域 2 的,并拒绝/关闭连接

最佳答案

在大多数情况下,不会。 SSL 握手发生在发送 HTTP 请求之前(实际上 HTTP 请求是通过已建立的 SSL channel 发送的)。 TLS 1.0 协议(protocol)指定了特殊的 TLS 扩展,让客户端告诉服务器,要为哪个主机提供证书。不幸的是,并非所有(我想说很少)客户都支持此扩展,因此您的问题没有通用的解决方案。

关于node.js - 如何让 Node.js/Express.js 在 ssl 验证之前拒绝基于 vhost 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652659/

相关文章:

node.js - 如何使用 React 从 Mongodb 集合中查询单个文档

node.js - 是否可以使 node 命令看到与指定位置不同的位置的 node_modules 文件夹?

node.js - 无法安装express和packages

express - Multer 没有通过快速放置路线

javascript - 找不到模块 'esprima'

javascript - 如何在 Electron 的预加载js中运行knex?

reactjs - 在 HEROKU 上从 http 重定向到 https

Python请求库——获取SSL证书信息

c# - ASP.Net MVC 重定向到 SSL 问题

node.js - 在 Ubuntu 上使用 Node 服务的静态文件速度慢