在 TLS 握手中不支持 SNI 的服务器是否可以毫无问题地启用 SNI

Can SNI be enabled without problems to servers that do not support SNI in TLS handshake

我们想在连接到各种外部端点 (SOAP/REST) 的 PHP 客户端中启用 SNI(服务器名称指示)。其中一些端点支持 SNI 作为服务器,但有些不支持。在所有传出请求上启用 SNI 会导致不支持 SNI 的服务器出现问题吗?

SNI 是一个可选的 TLS 扩展 ("server_name")。这意味着任何不明确支持此扩展的适当 TLS 堆栈都将忽略它。 SNI 被广泛使用,所有现代浏览器都启用了它。

如果您在启用 SNI 的情况下使用 TLS,那么几乎所有网站都应该可以正常工作。可能仍然有一些网站使用损坏的 TLS 堆栈,这将因为 SNI 存在而失败。但这些网站在现代浏览器访问时也会失败。此外,如果 SNI 不存在,更多站点将失败,就像 Cloudflare Free SSL 背后的所有内容一样。因此,默认情况下启用 SNI 并可能处理极少数损坏站点的后果肯定比处理大量没有 SNI 无法工作的站点要好。