【问题标题】:SNI unrecognized_name warning when terminating TLS at HAProxy在 HAProxy 处终止 TLS 时出现 SNI unrecognized_name 警告
【发布时间】:2023-08-27 13:24:01
【问题描述】:

我们有一个客户端,其代码是用 Java 1.7 编写的。默认情况下,Java 1.7 拒绝通过 HTTPS 连接到返回 SNI unrecognized_name 警告的服务器。可以关闭此行为,但(当然)我们的客户不能这样做。大多数其他客户只是忽略警告。

我们的域有一个有效的通配符证书,我们称之为 *.widgets.com。域 widgets.com 中的任何内容都会解析到我们的 HAProxy 负载均衡器。我们已经将该证书安装到负载均衡器上,并在监听端口 443 的前端中指定它。证书是最新的,当我们从 Qualys 测试它时检查良好......除了那个 SNI 警告。

我们的客户调用特定的子域,例如 foo.widgets.com。该服务运行良好,向任何调用它的人提供内容。当然,除了我们的客户,在我们返回 SNI 警告后谁不会连接到我们。

我在 Apache 上找到了很多关于如何解决这个问题的文章,但这些文章对我使用 HAProxy 没有帮助。在 HAProxy 上,我看到我可以指定多个证书,并且我被告知 HAProxy 将“选择正确的证书”。我是否需要为 foo.widgets.com 获得单独的非通配符证书?我不想购买另一个证书只是为了发现那不是解决方案。

【问题讨论】:

  • 这听起来更像是 HAProxy 认为 SNI 与证书不匹配。您绝对不需要单独的证书。

标签: ssl haproxy x509 sni


【解决方案1】:

原来问题与 HAProxy 无关。显然,我们有一个入侵检测系统,可以在中继到 HAProxy 之前终止 TLS。

可能有一种方法可以使 IDS 正常运行,向客户端提供正确的证书。但无论如何,我们在非生产环境中并不需要 IDS。所以我们把它关掉了,问题就消失了。

因此,如果您遇到类似的问题,在确保您的证书适合您正在测试的请求之后,我的建议是检查您是否有任何安全软件可以在流量到达您的 LB 之前拦截它.

【讨论】: