网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

什么是服务器名称指示(Server Name Indication, SNI)?

更新时间:2026年03月27日   作者:spoto   标签(Tag):

服务器名称其实只是计算机的名称而已。除非该服务器只托管一个域名,而服务器名称与域名相同,否则这种名称不会显示在最终用户的网页上。在传输层安全协议中,有一个名为“Server Name Indication”的功能,它允许客户端在握手过程开始时明确指定自己想要连接的主机名。

什么是服务器名称指示呢?

服务器名称指示(SNI)是TLS协议的一个扩展功能。在TLS握手过程开始时,该功能允许客户端或浏览器指定其试图连接的主机名。这样一来,服务器就可以在同一端口和IP地址上显示多个证书。

SNI的特点/优势

  • 成本节约:获取与使用IP地址这样做会带来高昂的成本。SNI有助于减少在托管多个网站时所需的额外IP地址数量。因此,由于不需要额外的IP地址,因此可以节省大量的资金。
  • 兼容性:由于SNI得到了大多数现代网页浏览器和服务器的支持,因此它被广泛应用于在单个服务器上托管多个安全网站的场景中。
  • 多张证书:SNI允许安装多个组件。SSL/TLS证书在单个服务器上,可以在同一IP地址上托管多个域名。
  • 性能提升:SNI能够提升服务器的处理能力,同时优化资源的使用效率,从而加快网页的加载速度。

为什么使用 SNI?

由于IP地址是一种有限的资源,因此启用SNI可以有效节约使用这些资源。以下是使用SNI的一些好处:

  • 这样一来,网站管理员和所有者就更容易管理SSL/TLS证书了。因为他们不再需要为每一个需要SSL/TLS加密的网站购买并配置一个唯一的IP地址。
  • 在 SNI 的帮助下,服务器可以为一个IP地址下管理多个网站的TLS证书。
  • SNI的优势在于,通过扫描IP地址时,不会泄露相关的证书信息,从而提升了系统的安全性。

什么是主机名?

在 SNI 中,主机名指的是客户端希望与之进行安全通信的服务器的域名或 IP 地址。HTTPS。连接到网络的设备,可以通过其主机名来识别。在互联网的背景下,域名或某个网站的名称也是一种主机名。这两种方式都是独立于网络本身的存在的。IP地址与域名相关联。

什么是虚拟主机名?

在SNI中,虚拟主机名指的是客户端在SSL/TLS握手过程中所提供的主机名。当多个虚拟主机共享同一IP地址和端口时,该虚拟主机名用于指示客户端试图与哪个服务器进行连接。这种基于名称的虚拟主机技术使得在同一IP地址和端口上可以运行多个不同的虚拟主机。 虚拟主机名是一种存储在服务器上的主机名,它与其他主机名共同存在于同一服务器上,而且它没有自己的IP地址。 与虚拟现实类似,虚拟现实只是以数字形式存在,而并非存在于现实世界中。之所以称之为“虚拟”,是因为它缺乏一个具体的物理服务器来支撑其运行。

TLS SNI扩展的作用是什么?

传输层安全协议(TLS)用于通过互联网在客户端和服务器之间建立安全且加密的连接。服务器名称指示功能属于TLS协议的一部分,它允许客户端在SSL/TLS握手过程中指定自己试图连接的服务器的主机名。

通常,一个网络服务器需要管理多个域名,这些域名也被称为“网站名称”,即那些人类可以识别的网站名称。 如果这些网站采用了HTTPS协议,那么每个主机名都将拥有唯一的SSL证书。不过,问题在于,某个服务器的所有主机名都被分配了相同的IP地址。 这并非与HTTP相关的问题。因为一旦建立了TCP连接,客户端就会在HTTP请求中明确指出自己想要访问的网站。不过,HTTPS确实对HTTP消息进行了加密处理,但它并没有用另一种协议来替代HTTP。 相反,它需要的是……TLS握手过程在开始关于HTTP的讨论之前,需要先完成这些准备工作。 因此,如果没有 SNI,客户端就无法知道自己正在与哪个主机进行通信。 因此,服务器可以生成适用于错误主机名上的SSL证书。 如果SSL证书上的域名与客户试图访问的域名不匹配,客户端的浏览器会显示错误,并通常会终止与服务器的连接。为了让TLS过程能够正确地找到目标域名并获取正确的SSL证书,SNI功能会将域名添加到TLS握手过程中。 这样,TLS握手过程的剩余步骤就可以正常进行了。

SNI是如何工作的呢?

以下是描述Server Name Indication工作原理的步骤。

步骤1:TLS握手过程

客户端和服务器之间的TLS(传输层安全协议)握手过程是由客户端发起的。在这一阶段,客户端通过发送“客户端欢迎消息”来与服务器进行通信。

步骤2:客户端Hello消息

在客户端欢迎信息中,包含了所支持的TLS协议版本的列表,同时还包含了一个随机数,即nonce。此外,该信息还表明客户端支持SNI扩展功能。

步骤3:主机名规范

通过“客户欢迎信息”,客户可以输入自己想要连接的服务器的主机名,前提是该服务器支持SNI协议。

步骤4:服务器问候信息

如果服务器支持 SNI 功能,那么它会返回一个 “Server Hello” 消息。该消息中包含了所请求的主机名的 SSL 证书、随机数和 TLS 协议版本等信息。

步骤5:SSL证书验证

在握手阶段,客户端会检查服务器提供的SSL证书。如果SSL证书是合法且可信的,那么客户端就会完成TLS握手过程。

步骤6:HTTPS请求

所请求的主机名已经包含在其中了。HTTP当客户端向服务器发送 HTTPS请求时,就会使用主机头来进行区分。由于采用了基于名称的虚拟主机配置方式,因此服务器可以决定将请求路由到哪个虚拟主机上。

步骤7:虚拟主机服务

HTTPS请求由服务器处理,然后服务器会向客户端返回相应的响应。SNI技术通过允许多个支持HTTPS的网站使用同一个IP地址和端口来提升网络服务的效率。

哪些浏览器支持SNI协议呢?

以下是支持 SNI 的一些浏览器:

  • 谷歌浏览器,版本6及更高版本。
  • Mozilla Firefox(版本2及更高版本)。
  • Microsoft Edge(所有版本)
  • 苹果Safari浏览器(版本3及更高版本)。
  • Opera(版本8及更高版本)。
  • Android平板默认浏览器——适用于3.x版本及更高版本(Honeycomb)。
  • BlackBerry 10网络浏览器。
  • OpenSSL,从版本0.9.8f开始使用。

什么是加密的SNI?

加密的SNI协议是TLS协议的扩展功能,它能够对客户端在TLS握手过程中发送的SNI信息进行加密。这样做可以保护用户浏览数据的安全性。ESNI这是一种必要的功能。它确保了那些试图窃听通信内容的第三方无法利用 TLS 握手过程来追踪用户访问的网站。顾名思义,ESNI 就是通过加密 TLS 握手过程中的服务器名称指示部分来实现这一目的的。

什么是通配符证书?

在域名字段中包含通配符(*)的单一证书,被称为SSL/TLS通配符证书。因此,这种证书可以保护属于同一基础域名的多个主机或子域名。

与SAN类似,通配符也是SSL证书中的一项附加功能。如果你网站的多个子域名都包含通配符,比如new.websitename.com和blog.websitename.com,那么购买带有通配符的SSL证书既经济又实用。

SNI带来的好处

  • 多个SSL证书:SNI功能允许在单个IP地址上托管多个SSL证书,这样可以节省托管成本,同时也有助于简化SSL证书的维护工作。
  • 增强的安全性:SNI使得保护多个网站变得更加容易。它允许在多个域名上使用SSL证书,同时还能确保SSL证书的验证准确无误。所有这些措施都有助于提升网站的安全性。
  • 提升服务器效率:SNI减少了SSL证书对专用IP地址的需求,从而降低了服务器所需的IP地址数量,进而提升了服务器的运行效率。
  • 更好的网站管理:SNI使得网站所有者能够在同一台服务器上管理多种SSL证书,从而更高效地管理多个网站。
  • 更高的灵活性:SNI为网站所有者提供了更多的配置和管理SSL证书的选项。对于那些规模较大的网站或具有复杂托管需求的网站来说,这一功能尤其有用。
  • 在多个域名上托管:在同一个服务器和相同的IP地址上,通过使用SNI技术,可以托管并保护多个网站。SNI简化了SSL证书的维护工作,同时大幅降低了托管成本。
  • 适应能力:通过SNI技术,您可以轻松地从服务器上添加或删除网站,而无需修改服务器的配置或增加更多的IP地址。
  • 资源的更有效利用:SNI使得对资源的更合理使用成为可能。那些成本高昂且数量有限的IP地址也可以得到更有效的利用。为多个网站使用相同的IP地址会减慢网站的加载速度。IPv4这就是我们用来连接互联网的主要协议。

SNI的局限性

  • 缺乏加密的SNI支持:在 TLS握手过程中,SNI信息是以明文形式发送的。这意味着外部人员可以了解到所访问的网站的域名。不过,加密后的SNI(ESNI)可以解决这个问题,尽管目前这种技术还没有得到广泛的支持。
  • 每个IP地址对应一个证书。每个IP地址只能使用一张证书。因为SNI机制需要依赖SSL/TLS握手过程来决定使用哪张证书。当在同一IP地址上托管多个网站,且这些网站都使用不同的证书时,就会出现问题。
  • 仅支持 HTTPS 协议。SNI仅适用于HTTPS连接,对于其他协议(如FTP或SMTP)则没有任何好处。
  • 可能出现的配置错误:由于 SNI 的正常运行依赖于正确的服务器配置,因此,如果实现方式不当,就可能会导致配置错误。
  • 有限的浏览器和服务器支持:在尝试访问那些需要启用 SNI 功能的网站时,可能会出现兼容性问题。因为一些较旧的浏览器和服务器可能不支持 SNI 功能。
  • 存在的安全漏洞风险:像这样的攻击行为中间人攻击(MITM)袭击行为DNS欺骗或者,流量拦截行为可能会泄露用户的敏感信息,这也会使得 SNI 变得容易受到攻击。
  • 其一,SNI的运作速度可能不如那些不使用SNI的解决方案,或者那些使用专用IP地址的解决方案。这是因为,为了建立安全连接,服务器需要经历额外的步骤来选择合适的SSL/TLS证书。
  • 另一个缺点是,并非所有的网络浏览器和服务器都支持 SNI 协议。因此,在使用较旧的浏览器或平台时,可能会出现兼容性问题,这可能会导致错误或安全漏洞。

SNI与SAN之间的区别

  • 通过SNI或SAN技术,可以在同一台服务器上支持多个SSL证书。不过,它们实现这一功能的手段有所不同。SAN属于证书相关功能,而SNI则是一种服务器端的技术。
  • 正如您所知道的,SNI允许Web服务器在同一个IP地址上托管多个证书。根据客户端在初始请求中提供的域名信息,SNI使得服务器能够在客户端连接时选择出合适的证书。
  • 而SAN则是一种SSL证书功能,它允许通过单一的证书来为多个域名提供安全保障。SAN证书中包含了可以保护的额外域名列表(这些域名有时也被称为“主题替代名称”)。
  • 关于兼容性方面,目前大多数服务器和网页浏览器都支持SNI和SAN技术。不过,也有一些旧系统可能无法与这些技术兼容。

结论

本文已经详细讨论了关于服务器名称指示的各种方面和观点。现在,一旦您了解了SNI的工作原理,就可以将其应用于自己的项目和网站中。由于SNI是当前网络托管环境中的必要扩展功能,因此大多数系统都支持它。随着HTTPS成为新的网络标准,SNI使得从过时的HTTP协议切换到HTTPS变得更加容易了。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料