我的设置是这样的:
[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/