只是想知道 SNI 是否有助于将公共内容与私人内容分开。通过指定仅从 Intranet 解析的主机名,我设法将我们的服务器配置为/foo
为每个客户端提供服务,但/bar
仅为来自 Intranet 的客户端提供服务。
所以配置如下:(剥离到非常重要的部分)
NameVirtualHost *:443
# JkWorkersFile must be global so including it here
JkWorkersFile workers.properties
<VirtualHost *:443>
ServerName public.foo.com
JkMountFile uriworkermap-pub.properties
</VirtualHost>
<VirtualHost *:443>
ServerName private-foo
JkMountFile uriworkermap-priv.properties
</VirtualHost>
<VirtualHost *:443>
ServerName 10.1.2.3
JkMountFile uriworkermap-priv.properties
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
问题是,如果您将该名称添加到您的hosts
文件中以解析为公共 IP,那么 SNI 实际上将解析处理它,就像它是来自 Intranet 的有效请求一样。
我考虑过只使用数字 IP 而不是名称(例如10.1.2.3
)的想法,但我认为如果客户端在他们自己的子网中具有相同的 IP(例如,将端口转发到我的网络的公共 IP 的 Linux 主机),同样可以被欺骗服务器。
该节点位于我没有影响的防火墙后面。它只有一个 IP(内部 IP),但如果需要,我可以将其设为两个。
实际问题是:如何防止这种泄漏?例如通过htaccess?通过指定不同的 IP 地址?或者除了创建单独的服务器实例并忘记 SNI 之外没有其他方法吗?