什么是服务器名称指示(SNI)?
注:你可能会注意到,我们在这里使用的是技术上正确的术语 TLS 证书,而不是 SSL,因为 TLS 协议是 SSL 的后继协议,实际上也是目前正在使用的协议。更多解释,请参阅我们关于 TLS 与 SSL 的文章。
服务器名称指示(SNI)允许服务器在一个 IP 地址下为多个网站安全托管多个 TLS 证书。它在 TLS 握手过程中添加服务器(网站)的主机名,作为 CLIENT HELLO 消息的扩展名。这样,服务器就能知道在使用共享 IP 时应显示哪个网站。通常,在一台服务器上使用共享 IP 的公司都是托管公司,他们每天都会遇到这样的问题:"如何让我的服务器选择并提交正确的证书?
下面我们来详细了解一下这个问题。在 HTTP 网站上,服务器使用 HTTP HOST 标头来确定应显示哪个 HTTP 网站。但是,在使用 TLS(HTTPS 背后的协议)时,需要在建立 HTTP 会话之前创建安全会话,在此之前,没有主机头可用。
因此,这里就出现了一个难题:使用 HTTPS 时,如果没有 TLS 证书,浏览器中的 TLS 握手就无法完成,但服务器却不知道要提交哪张证书,因为它无法访问主机标头。
什么是 SNI,它能提供哪些帮助?
服务器名称指示(SNI)是 TLS 协议的扩展。客户端在 TLS 握手过程中使用 SNI 扩展指定要连接的主机名。这样,服务器(例如 Apache、Nginx 或负载平衡器,如 HAProxy)就能从列表或数据库中选择建立连接所需的相应私钥和证书链,同时将所有证书托管在一个 IP 地址上。
使用 SNI 时,服务器的主机名会包含在 TLS 握手过程中,这样 HTTPS 网站就能拥有独一无二的 TLS 证书,即使它们使用的是共享 IP 地址。
你可能会问,为什么这一点如此重要?为什么我们需要一种方法来支持共享 IP 的唯一证书?
IPv4 短缺的困境
互联网协议版本 4(IPv4)大约有 40 亿个 IP 地址。但是,全球连接互联网的计算机已经超过 40 亿台,因此我们正面临着 IPv4 地址短缺的问题。互联网协议版本 6(IPv6)应该能解决这个问题,提供数万亿个地址,但仍有一些现有网络设备不支持 IPv6。据估计,90% 的手机、个人电脑和服务器通用操作系统都能支持 IPv6。因此,我们已经非常接近全面支持IPv6,但对于少数仍需要共享IP的传统系统,可能必须采用双重方法--对于少数传统浏览器,SNI支持IPv4,而对于其他浏览器,则通过IPv6为所有域提供唯一IP。
SNI 如何帮助您解决 IPv4 短缺问题
有了 SNI,服务器就可以在一个 IP 地址下为多个站点安全托管多个 TLS 证书。
这样,需要和使用的 IP 地址就会减少,从而使 IP 地址更加可用。虽然 IPv4 地址终究会用完,但这一过程会放缓,人们也有更多时间更新到兼容的浏览器、路由器和服务器。
SNI 还使多个网站的配置和管理变得更加容易,因为它们都可以指向同一个 IP 地址。此外,它还有一个优点,即只需扫描 IP 地址就不会泄露证书,从而提高了总体安全性。
SNI 有缺点吗?
很明显,SNI 是共享 IP 的一个很好的解决方案,但还有一个小小的缺点;它只影响到很小一部分互联网用户,即那些使用传统浏览器或操作系统的用户。
传统浏览器和网络服务器不支持 SNI。现代浏览器(一般使用不到 6 年)都能很好地处理 SNI,但两个最大的传统浏览器在 SNI 方面存在困难,它们是 Windows XP 上的 Internet Explorer(或更老版本,据估计 2018 年 4 月有 3.18% 的用户使用该浏览器访问网站)和 Android 2.3 及更老版本(约有 0.3% 的 Android 用户使用)。如果传统浏览器或操作系统不支持 SNI,握手将选择默认证书,这可能会导致常见的名称不匹配错误。
XP 和 2.3 之前的安卓系统的使用率将继续下降,因此兼容性问题将变得越来越不重要。另外,请记住 Windows XP 不支持 TLS 1.1 或 TLS 1.2,而随着 PCI 要求的即将出台,用户无论如何也无法访问许多网站了。
这些浏览器的使用率正在下降并将继续下降,但这意味着目前仍有一定比例的网络用户在接收 HTTPS 网站(如果该网站是通过 SNI 传输的)时会遇到困难。
这里有支持和不支持 SNI 的浏览器和版本的完整列表。
解决这一问题的方法之一是使用多域 TLS 作为默认证书,这样就能在一个证书中列出共享 IP 上的所有域(下文将详细介绍)。
关于 SNI,另一个需要指出的问题是,在 TLS 1.2 中,连接是在未加密的情况下开始的,这就会使客户端受到审查和监控。TLS 1.3 已经解决了这一问题,但还没有得到完全支持,因此请确保在 TLS 1.3 被广泛采用后立即做好准备。
这些挑战当然不足以降低 SNI 的魅力。我们建议您尽可能使用 SNI。
SNI 与 SAN 的区别
多域证书(有时也称为 SAN 证书)是解决 IPv4 枯竭问题的另一种方法。多域 TLS 证书不像 SNI 那样存在与浏览器或服务器兼容的缺点。多域 TLS 证书的工作原理与其他 TLS 证书相同,单个证书最多可覆盖 200 个域。而 SNI 则可以在同一 IP 地址上轻松承载数百万个域。
那我们为什么不使用多域证书呢?
在多域证书中,所有域都需要添加到一个证书中。这些域被列为主题备选名称或 SAN。如果需要添加或删除 SAN,或者需要撤销或更新证书,则需要更换证书并重新部署所有域。谁共享同一个证书也是可见的。例如,对于从托管公司获得证书的公司来说,如果托管公司为客户使用多域证书,那么该公司可能不会乐意与其竞争对手共享证书。
这也会使证书变大,添加的名称越多,证书就越大。虽然我们谈论的只是千字节,但在下载网站上的任何其他内容之前,都需要下载这些信息。从本质上讲,它会阻止网站加载一毫秒或更多毫秒,具体取决于互联网连接情况--这绝不是什么大的延迟,但在谷歌排名竞争激烈的情况下,几毫秒的页面加载速度可能意味着很多。
另一个重要的缺点是,多域证书在组织间共享时不支持 OV(组织验证)或 EV(扩展验证)SAN。例如,在前面提到的托管公司的情况中,多个公司的域名被列为一个证书下的 SAN,这些域名将是 DV(域验证)级别。这些验证级别指的是证书签发前经过验证的信息量。DV 意味着网站所有者证明了对域的管理控制,而 OV 和 EV 还验证了网站所有者的身份信息(如法律和业务存在)。
多域证书的知名用户包括 Cloudflare 和 Google。Google 仅在不支持 SNI 的旧版客户端中使用。
我应该使用 SNI 还是多域证书?
总的来说,虽然 SNI 和多域证书可以实现相同的目标,即减少所需的 IPv4 地址数量,但它们实现目标的方式恰恰相反:
SNI 意味着你可以为每个域(即多个证书)提供唯一的证书,而这些域共享同一个 IP。另一方面,多域证书只需为多个域使用一个证书,这也意味着多个域使用一个 IP。
显然,SNI 和多域证书都有其存在的价值--既可以单独使用,也可以结合使用。有了这些解决方案,您就可以继续为客户托管证书,而不必担心专用 IP 地址或兼容性问题。
如果您想与 GlobalSign 讨论适合您的解决方案,请立即与我们联系。
本文标签: # sni认证
发布评论