带有 SNI 的 Apache HTTPS 反向代理,代理上没有密钥

Posted

技术标签:

【中文标题】带有 SNI 的 Apache HTTPS 反向代理,代理上没有密钥【英文标题】:Apache HTTPS reverse proxy with SNI without key on the proxy 【发布时间】:2014-07-30 07:52:53 【问题描述】:

example1.com 和 example2.com 解析为 host0。 host0 使用两个 VirtualHost 运行 Apache 反向代理。它将 example1.com 的请求委托给 host1,将 example2.com 的请求委托给 host2。

在所有地方都使用http,这显然可以工作。

使用 https,我可以将 example1.com 和 example2.com 的密钥粘贴到 host0 上,然后让 host0 与 host1 和 host2 交谈 http 或 https。鉴于 SNI,这也应该有效。

我的问题:如果没有 host0 上的 example1.com 或 example2.com 键,它可以工作吗?我想避免 host0 能够执行中间人攻击。

如果我对 SNI 的理解正确,则密钥材料仅在客户端将所需的虚拟主机传达给 host0 后才会交换。这应该是(?)足够的信息,Apache 基本上可以将连接转发到主机 1 或主机 2,而根本不需要查看传输的内容。这根本不需要密钥材料。

【问题讨论】:

nginx TCP forwarding based on hostname的可能重复 【参考方案1】:

如果您不介意使用 Nginx 或 HAProxy 代替 Apache,您可以在 ServerFault 的以下问题中找到很好的答案:

Can a Reverse Proxy use SNI with SSL pass through?

【讨论】:

【参考方案2】:

您真的需要 Apache 反向代理,还是需要解决问题?我遇到了同样的问题,我在 tcp 模式下使用 HAProxy 解决了它,如此处所述http://blog.haproxy.com/2012/04/13/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ 而不是 Apache 反向代理。

【讨论】:

以上是关于带有 SNI 的 Apache HTTPS 反向代理,代理上没有密钥的主要内容,如果未能解决你的问题,请参考以下文章

未在运行状况检查请求中设置 SNI 扩展 (Apache v.2.4.35)

使用 Haproxy 或 Nginx 反向代理 Open***

在 apache 2.2.3 上设置通配符子域(带有反向代理)

使用 SSLCertificateSocketFactory 的 Android HTTPS SNI 支持

https_有无SNI匹配证书方式

使用 SNI 通过 HTTPS 提供服务时出现 CloudFront 错误