如果您有一个轻量级前端使用 SNI 跨不同 HTTPS 服务器分派请求的设置,则 Apache 执行的额外检查可防止无效请求被用于访问原本无法访问的内容。
由于 SNI 字段在服务器发送任何内容之前由客户端发送的 TLS 客户端问候消息中,因此可以构建一个轻量级前端,它对 HTTP 和 TLS 知之甚少,但仍然能够将 TLS 连接分派到不同的后端取决于主机名。
这样的前端只需要知道足够的 TLS 即可解析客户端 hello 消息并提取主机名。一旦有了它,它就可以将所有未修改的数据传递到单独的 HTTPS 后端。只有后端需要建立 TLS 连接所需的服务器密钥。
在此设置中,前端将永远无法知道 HTTP 主机标头中发送的主机名,因为它无法解密流量。因此,这样的前端不可能比较两个主机名。
即使 HTTPS 服务器本身对 SNI 一无所知,此设置确实允许在单个 IP 地址后面托管多个域。但是,如果 HTTPS 服务器对 SNI 一无所知,则客户端可能会发送损坏的请求,其中前端和后端会看到同一 HTTPS 请求的两个不同主机名。
可以配置前端和后端,使得某个虚拟主机只能通过告诉前端和后端不同的主机名来访问。
如果对于每个有效的 HTTPS 请求都无法访问虚拟主机,则如果可以通过发送无效的 HTTPS 请求来访问该虚拟主机,则可以合理地将其视为漏洞。如果后端是支持 SNI 的 Apache 版本,则您询问的检查将防止该漏洞。