【问题标题】:Use multiple SSL certificates per domain with HAProxy使用 HAProxy 为每个域使用多个 SSL 证书
【发布时间】:2014-08-26 22:37:42
【问题描述】:

当 SSL 证书被吊销时,一些浏览器(包括现代浏览器)不会从服务器获取新证书,因此大约 0.1% 的客户端会收到“吊销证书”错误页面并且他们无法访问服务安全。客户端的问题通过清除浏览器的缓存来解决。然而并不是每个人都这样做。大多数人只是尽可能快地关闭页面,因为错误消息往往会说“无法验证接收数据的真实性”和“报告这个损坏的站点”..

有没有办法配置 HAProxy,它在 Web 服务器集群前作为 SSL 卸载程序工作,以允许使用“旧”证书建立连接,而所有协商和重新协商都使用“新”证书提供服务" 证书?

附:此问题部分是由 HAProxy SSL 会话缓存引起的,这对我们的负载至关重要,因此无法禁用。

【问题讨论】:

  • “当 SSL 证书被吊销时,某些浏览器(包括现代浏览器)不会从服务器获取新证书” - 我不清楚问题陈述. SSL/TLS 是一种网络控制,我从来没有听说过网络级别的缓存,比如证书。有更高级别的连续性方案,但它们本身并没有缓存(而且它们很少见)。这是与HPKP 的不良互动吗?我认为 Chrome 和 Firefox 正在这样做,但我不确定这些症状听起来是否正确。
  • @jww 我没有说证书被缓存,我只是说清除浏览器的缓存是在 Chrome、Firefox 和最新的 IE 上解决这个问题的唯一方法。我不知道清除缓存后后台会发生什么,可能所有 SSL 会话都已清除或所有证书信息也已删除,因此在下一次连接时完成了完整的证书验证。不过,解决此问题的唯一方法是清除浏览器的缓存。问题是:与服务器的连接被拒绝,人们无法使用该服务,即使已经发出了有效的证书。

标签: ssl https ssl-certificate reverse-proxy haproxy


【解决方案1】:

服务器的证书在每次完整握手中发送,并且仅在收到证书时才对证书进行验证,并针对接收到的证书进行验证,而不是缓存任何内容。但是,如果证书的指纹与他们之前在浏览器会话中收到的指纹不匹配,客户端可能会拒绝建立连接。或者可能是,他们使用隐式证书固定(带有浏览器扩展),这将检测新证书是否与之前收到的证书冲突并抱怨它。

您对此无能为力。在 SSL 握手开始时,您从客户端获得的只是 ClientHello 记录。这可能包含目标主机的名称(如果使用 SNI),但没有关于客户端可能看到的任何旧证书的信息。这意味着,服务器没有可以决定的信息,它应该为相同的主机名发送新证书还是旧证书。

【讨论】:

  • 问题是 SSL 会话缓存:bit.ly/1sKERGw 只要浏览器打开,使用“旧”证书建立的 SSL 会话将保持活动状态。服务器(HAProxy)对于每个 Keep-Alive 会话(通常大约有 5 个)仅接收一次完整的握手,并且服务器还通过其 ID 缓存 SSL 会话,因此可以在下一次请求时从缓存中加载它而无需重新谈判。我只需要 HAProxy 向客户端发送 HelloRequest 或等到从 SSL 会话缓存中提取会话并导致重新协商。
  • 我不确定这是否真的是原因。会话恢复只是一个提议,但如果客户端提议恢复服务器不再拥有的会话,它将只会导致不恢复会话并进行完整的握手(使用新证书)。并且服务器应该在重新启动时放弃缓存的会话,或者至少如果它有不同的证书。
  • 是的,这实际上解决了“问题”,但在重新启动期间连接被丢弃。我想这是一个不同的问题需要照顾。重新启动似乎是唯一没有编写自己的模块的“直截了​​当”的解决方案。 HAProxy 文档对此一无所知,我怀疑他们是否会支持如此具体的内容。
猜你喜欢
  • 2017-09-10
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2015-06-21
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多