什么是服务器名称指示(SNI)?

互联网注重安全性和可靠性。互联网和云服务提供商采取一切可能的措施来确保数据隐私,并保护用户免受在线诈骗。同样,SaaS公司也部署了先进技术和现代技术,以减轻网络安全威胁并保护其服务器免受恶意攻击。

在这方面,多年来引入了多种证书、标准和协议。例如,传输层安全(TLS)是一种著名的加密协议,用于确保互联网安全。为了支持TLS,有一个名为服务器名称指示(SNI)的扩展,用于在服务器上安全托管多个TLS证书。

SNI在TLS握手中添加域名,使服务器能够在使用共享IP时展示用户想要访问的特定网站。通过这种方式,客户端设备可以立即指定所需网站,并防止TLS握手过程中出现名称不匹配错误。

在本文中,我们将详细审视服务器名称指示,探讨其工作原理,并讨论其在当今数字环境中的重要性。那么,让我们开始吧!


什么是服务器名称指示 (SNI)?

服务器名称指示通常用于解释 TLS 握手和相关流程。但是,它的解释有点棘手,需要基本的技术知识才能更好地理解。对于初学者来说,这里是服务器名称指示最简单的解释,以了解 SNI 的含义。

假设你是一名送货员,想把披萨送到一栋公寓楼。与具有街道地址的单栋房屋不同,公寓楼有几层楼和数百套公寓。因此,找到确切的公寓变得更具挑战性,以便将披萨送到合适的人手中。因此,除了街道地址外,你还需要楼层号、建筑区、居民姓名和公寓号等信息才能到达准确位置。

Web 服务器类似于托管数千个不同类别域名的公寓楼。由于服务器使用单个 IP 地址托管多个站点,因此每个域都拥有唯一的 SSL 证书。当连接到其中一个站点时,服务器需要详细信息来显示正确的 SSL 证书。换句话说,服务器不能仅依赖 IP 地址,因为这可能导致 HTTPS 连接因错误的 SSL 证书而终止。

为了解决这个问题,服务器使用服务器名称指示,它充当 HTTPS 中使用的 SSL/TLS 协议的扩展。SNI 简化了TLS/SSL 握手过程并确保识别正确的 SSL 证书。借助此扩展,客户端设备可以在 TLS 握手期间立即指定所需的域并访问该网站而不会出现任何错误或延迟。


服务器名称指示示例

假设名为 ABC 的服务器分别托管三个不同的网站 www.website1.com、www.website2.com 和 www.website3.com。由于所有这些网站都托管在同一位置,因此它们具有相同的 IP 地址和各种 SSL 证书。因此,当您尝试访问 www.website1.com 时,SNI 会轻松识别相应的 SSL 证书并建立安全连接。

这样,SNI 可以避免“通用名称不匹配”错误和“您的连接不是私密的”错误。最初,服务器名称指示不是 TLS/SSL 协议的一部分。当时,上述错误非常普遍,互联网用户在尝试访问所需网站时不得不面对不便。

2003 年,SNI 成为传输层安全性 (TLS) 的扩展,并彻底改变了用户体验。如今,服务器名称指示支持所有操作系统、Web 浏览器和当前使用的服务器。


迫切需要指示服务器名称

当设备尝试与 HTTP 站点建立连接时,服务器会使用 HTTP HOST 标头来显示相应的 HTTP 网站。为此,传输层安全性 (TLS) 作为 HTTPS 背后的协议发挥着至关重要的作用。在 TLS 握手过程中建立 HTTP 会话之前,需要创建一个安全会话。

在此之前,没有 HOST 标头,如果没有 TLS 证书,TLS 握手就不完整。要访问正确的 HOST 标头,服务器必须知道要提供的确切 TLS 证书,以便与 HTTP 站点建立安全连接。

这就是服务器名称指示变得至关重要的地方。它作为 TLS 扩展,简化了 TLS 握手过程。使用服务器名称指示 SSL,服务器可以更轻松地选择相应的密钥和证书链并建立安全连接。尤其是当多个证书托管在单个 IP 地址上时,SNI 可帮助服务器选择正确的证书并继续前进。

没有服务器名称指示的标准 TLS 握手非常耗时、效率低下,而且极易出错。另一方面,TLS SNI 握手速度更快、效率更高,因为 TLS 握手中已经包含服务器主机名。因此,SNI HTTPS 网站可以拥有自己唯一的 TLS 证书和单个 IP 地址。

比较检查
标准 TLS 握手与支持 SNI 的 TLS 握手的说明

SNI 如何工作?

如前所述,一个 Web 服务器可以在一个 IP 地址上托管多个域名。每个主机名(网站)都有一个唯一的 SSL 证书,用于在 TLS 握手过程中建立安全连接。

在服务器名称指示之前,托管公司必须为每个 SSL 证书购买一个唯一的 IP。这是一个昂贵的过程,因为管理不同域名的大型 IP 地址数据库需要足够的预算和存储空间。

带有和不带有 SNI 的 HTTPS
SNI HTTPS 简化了海量数据存储(和预算!)

SNI 的引入解决了这个问题,它允许用户在单个 IP 地址和服务器上托管多个站点。SNL TLS 扩展的工作原理如下:

步骤 1:TLS 握手启动

用户在 Web 浏览器中输入域名(网站)。这将启动 TLS 握手过程,设备将尝试与特定站点建立安全连接。

步骤 2:插入 HTTPS 标头

SNI 将 HTTPS SNI 标头插入 TLS 握手中,以便 Web 浏览器可以发送所需域的名称。

步骤 3:SSL 证书展示

一旦服务器看到虚拟域(HTTPS SNI 标头),它就会找到用户请求的特定站点并提供正确的 SSL 证书。

步骤 4:单个 IP 地址上的多个主机名

SNL 消除了每次识别新 IP 地址的需要,因为服务器可以在单个 IP 地址上托管多个域。

步骤 5:更好的用户体验和快速 SSL 部署

最终,SNI 增强了用户体验,使客户端能够更快、更准确地访问所需的网站。此外,TLS SNI 握手使 SSL 部署变得经济高效且轻松。


SNI 的好处

服务器名称指示提供了多种好处。其中一些列如下:

  1. 解决IPv4短缺问题

SNI 最大的优势在于它帮助我们解决了 IPv4 短缺的问题。据估计,互联网协议版本 4 (IPv4) 中有超过40 亿个 IP地址。与此同时,连接到互联网的计算机和数字设备的数量也已超过 40 亿。因此,IPv4 地址的短缺使得托管公司难以管理如此大量的数据。

IPv4 耗尽时间线(1980-2010)
IA 回顾 SNI 解决 IPv4 短缺问题的方式

SNI 的引入使得云服务器可以在单个 IP 地址上托管具有唯一 TLS 证书的多个域。这意味着未来我们需要更少的 IP 地址来托管数十亿个新闻网站。随着我们进入互联网协议版本 6 (IPv6),SNI 将在解决 IPv4 短缺问题和提高 IP 地址可用性方面发挥关键作用。

  1. 更好的互联网使用体验

SNI 通过提高准确性和减少可能的错误来加快网站加载速度。客户端的设备可以更快、更准确地完成 TLS 握手过程并建立与请求站点的安全连接。同样,SNI 使互联网用户可以轻松更新到与 IPv6 兼容的高级服务器并使用高科技路由器和浏览器。

  1. 简便的网站配置

SNI 的另一个好处是它使网站配置变得更加简单和易于管理。用户可以使用此 TLS 扩展来管理同一 IP 地址上的多个网站。

  1. 提高安全性

在启用 SNL 的 TLS 握手中,服务器只需扫描 IP 地址即可建立安全连接。由于无需透露所请求域的 SSL 证书,因此该过程提高了整体安全性。

  1. 成本效益

由于托管公司无需为不同的域名购买多个 IP 地址,因此他们只需要很少的存储空间来管理其网站。因此,SNI 可帮助他们节省资金并提供长期财务利益。


服务器名称指示的缺点

  1. 不支持旧版浏览器

服务器名称指示的最大缺点是其兼容性问题,因为某些特定的 Web 服务器和浏览器不支持 SNI。例如,超过六年历史的旧版浏览器(如 Internet Explorer、Android 2.3 和黑莓操作系统)通常难以使​​用 SNI。因此,这两种浏览器和操作系统的用户经常会报告“通用名称不匹配错误”,因为在 TLS 握手过程中选择了默认 SSL 证书。

当前使用的网络浏览器(新旧)
检查你的浏览器是否存在 SNI 兼容性问题
  1. 不完善的模型

一些技术专家还认为 SNI 并不完善,因为信息传输时没有加密。例如,主机名是加密的,很容易受到网络犯罪分子的第三方攻击。另一方面,为每个网站设置一个唯一的 IP 地址会是一个更安全的选择。在这种情况下,即使没有 SNI 也可以实现安全连接。

  1. 有限保护

SNI 的另一个缺点是,与请求域的连接是在 TLS 1.2 中设置的,这几乎无法提供针对审查和监视的保护。虽然这个问题已经在 TLS 1.3 中得到考虑,但距离 TLS 1.3 被广泛采用仍需要更多时间。


如何解决这些挑战

你一定想知道,有没有什么办法可以解决上述挑战?下面推荐一些可行的解决方案。

  • 多域名 TLS 证书

如果您的 Web 浏览器或操作系统不支持 SNI,请开始使用多域 TLS 作为默认证书。使用此选项,您可以在单个证书上列出共享 IP 上的所有域或网站。此外,多域 TLS 证书可以帮助您解决 IPv4 耗尽问题以及浏览器或服务器兼容性。

观看下面的视频了解更多详细信息:

  • 加密 SNI (ESNI)

加密 SNI (ESNI) 是解决信息安全和防范网络安全威胁问题的另一种可行解决方案。ESNI 部分加密 SNI 部分的客户端问候并保护客户端和服务器之间的通信。最终,未经授权的用户无法看到所请求的证书,从而提供扩展保护。Mozilla Firefox 和 Cloudflare 等现代网络浏览器都支持 ESNI。


主要区别

我们在文章中使用了几种替代和相反的术语。为了更好地理解,下面对其中一些进行了更全面的解释。

SNI 与多域名 TSL 证书

尽管 SNI 和多域 SSL 证书都可以减少所需的 IPv4 地址数量,但它们执行此操作的方式不同。在 SNI 中,网站尽管托管在同一个 IP 地址上,但都有自己的 SSL 证书。但是,多域 TSL 证书只需要一个证书用于多个域,这意味着多个域可以托管在一个 IP 上。

多域名 TSL 证书与 SNI
两者执行相同的任务,但操作方式不同

主机名与虚拟主机名

主机名是指连接到网络以建立安全连接的网站(也称为域名)的名称。每个网站都有自己的 SSL 证书和共享 IP 地址。另一方面,虚拟主机名没有专用的物理服务器或自己的 IP 地址,因为它是虚拟的,没有实际存在。


支持 SNI 的浏览器、服务器和库

下面列出了支持 SNI 的现代浏览器、服务器和库:

序号 浏览器 服务器 图书馆
1 Internet Explorer 7 Apache Tomcat 9 Java 1.7
2 Opera 8 Apache 2.2.12 Ruby 2.0
3 Safari 2.1 Microsoft IIS 8 Erlang r17
4 Google Chrome 6 IBM HTTP 服务器 9.0.0 Python .7.9rc1/3.2alpha4
5 Android 3.0 nginx 0.5.23 PHP 5.6
6 Windows Phone 7 Jetty 9.3.0 QT 4.8
7 适用于 iOS 4.0 的移动版 Safari Perl 1.56
9 黑莓 10
10 Konqueror/KDE 4.7
10 火狐浏览器 2

最后的话

服务器名称指示(SNI)在提升互联网用户体验方面发挥着关键作用。在浏览不同网站时,我们使用SNI在服务器和请求的域之间建立安全连接。它是一个简化TSL握手过程并防止“通用名称不匹配错误”的扩展。

综合以上内容,很明显SNI对互联网用户非常有利。SNI提供的一些主要好处包括更好的互联网使用体验、简便的域配置以及增强的安全性。同样,该扩展帮助我们解决IPv4短缺问题,并在不影响性能的情况下降低运营成本。同时,它也有一些缺点,如兼容性问题、对监控的有限保护以及缺乏信息加密。你可以通过使用多域TSL证书和加密的SNI来解决这些问题。

最后,在选择网络浏览器、操作系统、服务器或库时,请确保它支持SNI并满足你的系统要求,以获得更好的效果。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部