单个网站的多个 HTTPS 服务器和单个 IP?

700*_*are 4 https

假设我有一个 TCP 级负载平衡器,它在两个后端 HTTPS 服务器之一和客户端之间传递 TCP 数据包。为了确保加密没有问题,负载均衡器必须维护一个表,以确保 X 客户端 IP 始终位于 HTTPS 服务器 A 上,Y 客户端 IP 始终位于 HTTPS 服务器 B 上,等等。

假设客户端是移动的,例如从 3G 切换到 1X 互联网连接协议会发生什么?在这种情况下(几乎可以肯定)会导致 IP 地址的更改。用户体验会怎样?

  • 重新建立 SSL/TLS 连接?(假设用户的下一次点击是在IP地址更改完成后,则不会中断)
  • 完全中断安全连接?(用户会看到错误,然后必须重试)
  • 回退到较低版本的 SSL/TLS?(同样,没有中断,但是如果IP再次更改,它会恢复正常还是失败?)

jim*_*gee 6

如果您有一个对 HTTP 有很好理解的负载均衡器(大多数),您通常可以根据 cookie 为给定的真实服务器配置“粘性”。负载均衡器将一个 cookie 注入服务器的响应中,每个可能的真实服务器都有一个唯一的值。在对同一域的后续请求中,行为良好的浏览器将发回相同的 cookie,负载均衡器将读取该 cookie 并将其重定向回与以前相同的服务器。

这将取决于特定负载均衡器的实现,它是否尊重不同源 IP 地址的 cookie 值,或者只是将其放回循环(或加权)池中,但我使用过的大多数只会如果存在“粘性”配置,则使用 cookie。

更大的问题将取决于您如何应用 SSL 证书。您将有平衡器做SSL加密/解密这个工作负载。如果服务器上应用了 SSL 证书,负载均衡器将无法检查加密隧道中的底层 HTTP 数据,因此只能进行 TCP 负载均衡(即 wweighted 或 round-robin)。如果需要此设置(例如,作为某些端到端加密合同条款的一部分),您必须设置规则,以便一台服务器优先于另一台服务器,除非它不可用(例如将其设置为故障转移备份,而不是负载平衡服务)——在这种情况下,您只需简单地重新连接客户端。您可以通过将应用程序/会话状态存储在弹性/冗余(数据库)存储中并在每个请求中发布会话标识符(通过 cookie、隐藏表单字段或查询字符串参数)来缓解应用程序中的这种情况——要非常小心回复:如果你这样做,会话安全。

其他规定将适用于您在同一 IP 上的多个启用 SSL 的网站的应用程序。大多数(如果不是全部)负载平衡器/服务器设备将(不能)将多个 SSL 证书绑定到同一个 IP/端口组合。充其量,*.yourdomain.example.org可以将通配符证书应用于一个 IP/端口(例如覆盖 www.yourdomain.example.org、other.yourdomain.example.org),或者可以使用具有多个 SAN(主题备用名称)的证书,而是(尽管大多数证书供应商不会为多个根域颁发带有 SAN 的基于 SAN 的证书)。