在同一 IP 上设置多个支持 SSL 的站点的最佳选择是什么?

信息安全 tls 网络服务器
2021-08-30 12:52:15

如果多个主机名托管在同一个 IP 上,那么让它们支持 https 并不简单。就浏览器支持和/或 Web 服务器支持而言,最好的选择是什么?

4个回答

从我所见,“服务器名称指示”是目前实现这一目标的主要方式。

缺点之一是较旧的浏览器不支持此功能,因此取决于站点,可能无法使用它。

编辑:只是为了更新@DW 和@Piskvor 的评论,现在链接的维基百科页面上有支持和不支持的浏览器列表。

所有流行的浏览器都支持 SNI,包括 Windows Vista 及更高版本上的所有 Internet Explorer 版本。Windows XP 上的 Internet Explorer 6、7 和 8 是不支持 SNI 的主要浏览器,但它们自 2014 年 4 月起不再接收安全更新。

有两种方法:要么所有站点都使用相同的证书(在这种情况下,您需要一种方法让客户端浏览器接受证书,而不管客户端打算联系哪个站点),或者您根据站点选择正确的证书客户端想要连接的(在这种情况下,您必须以某种方式获取该信息)。

对于第一种方式,请考虑RFC 2818,它指定了浏览器对服务器证书的实际期望。浏览器想要连接到一个 URL,其中包括一个服务器名称部分(在 next 之后https://但在 next 之前/);浏览器希望在服务器证书中找到该名称。详细信息在第 3.1 节中。基本上,会扫描证书中的 Subject Alt Name 扩展名以查找 type 的名称dNSName,其中之一必须与 URL 中的服务器名称匹配。如果 Subject Alt Name 扩展名根本不包含dNSName,或者如果服务器证书中没有 Subject Alt Name 扩展名,则subjectDN使用 中的 Common Name。通配符“*" 可用于匹配“任何”名称部分,但并非每个浏览器都可靠地支持。

因此,要支持同一 IP 和端口上的多个站点,请使用在主题替代名称扩展中列出所有站点名称的证书。这有一些缺点,例如它会显示所有站点名称(只需连接并查看证书);此外,每次添加新站点时都需要获取新证书。最后,您的证书提供商可能会使事情变得更困难或更昂贵(例如,StartSSL的免费证书仅是单域的;要获得具有多个域的证书,您必须付费)。

第二种方式涉及服务器名称指示,它是 SSL 的扩展。使用此扩展时,客户端会在握手中尽早宣布预期的服务器名称,以便服务器可以根据客户端想要与之交谈的站点选择要使用的证书。不幸的是,Windows XP 上的 Internet Explorer 不支持 SNI,这仍然是一种常见的组合(根据StatCounter 全球统计数据,截至 2012 年 10 月,仍有超过 12% 的 Web 用户使用 IE 8.0,估计其中很多关于 WinXP——请注意,由于 WinXP 份额占操作系统的 27%,因此可以得出结论,超过一半的 WinXP 用户已切换到非 IE 浏览器)。放弃 12% 的潜在网站受众是一项重要的政策决定。

此外,对于 SNI,服务器软件必须支持它并配置为使用它。请参阅此页面了解如何使用 Apache 和 mod_ssl 进行操作。

如果您的主机名允许,另一种选择是使用通配符 SSL 证书。
因此,您将拥有一个 CN=*.yourdomain.com 的证书,涵盖 www.yourdomain.com、mail.yourdomain.com、ftp.yourdomain.com 等。

据我所知,对于大多数 Web 服务器,如果您必须拥有不同的主机名并且它们必须在同一个 IP 上(最好使用虚拟 IP,但让我们离开),您将需要使用不同的端口。
例如 443、444、445 等。

对用户来说并不总是那么直观,但是......