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

2024年10月22日 | 阅读4分钟

本文将详细解释服务器名称指示(SNI)这一主题。在进入主要主题之前,我们首先了解一下什么是服务器名称。

什么是服务器名称?

服务器名称只是计算机的名称。对于网络服务器,除非服务器只托管一个域且其名称与域名称相同,否则用户不会看到此名称。客户端通过传输层安全(TLS)计算机网络协议的服务器名称指示功能,在握手之前提供要连接的主机名。

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

服务器名称指示(SNI)是 TLS 协议的一个扩展。在 TLS 握手开始时,客户端或浏览器可以指定其连接的主机名。服务器因此可以使用相同的 IP 地址和端口显示多个证书。在 SNI 之前,每个 IP 地址只能颁发一个 SSL/TLS 证书,这使得在同一服务器上运行多个安全网站成为不可能。

What is Server Name Indication(SNI)

为什么要使用服务器名称指示?

IP 地址是非常稀缺的资源,即数量非常少。因此,SNI 有助于保护这些 IP 地址。

使用 SNI 的其他重要原因如下:

  • 需要 SSL/TLS 加密的网站无需使用 SNI 设置单独的 IP 地址。
  • SNI 使网站管理员和所有者维护 SSL/TLS 证书的连接更加简单。
  • SNI 使服务器能够在一个 IP 地址下托管多个站点的多个 TLS 证书。
  • SNI 提供了隐藏证书以防止扫描的好处,这有助于提高安全性。

SNI 的工作原理

  • 客户端在 TLS 握手过程中向服务器发送“ClientHello”消息。
  • “ClientHello”消息中包含客户端想要连接的服务器的主机名。
  • 服务器作为响应发送回的“ServerHello”消息中包含所请求主机名的 SSL/TLS 证书。
  • 如果服务器不支持 SNI 或没有所请求主机名的证书,它将返回错误消息并断开连接。
  • 如果服务器有所指定主机名的有效 SSL/TLS 证书,客户端和服务器将完成 TLS 握手并开始加密连接。
What is Server Name Indication(SNI)

现代网络浏览器和服务器,如 Apache 和 Nginx,在很大程度上支持 SNI。较旧的服务器和浏览器可能不支持 SNI,这可能导致兼容性问题。

服务器名称指示的特性

以下是服务器名称指示的一些特性或特征:

  • 成本节约:IP 地址的获取和使用非常昂贵。SNI 有助于减少托管多个网站对额外 IP 地址的需求。因此,由于无需额外 IP 地址,可以节省大量资金。
  • 兼容性:SNI 是一种广泛使用的技术,用于在单个服务器上托管多个安全网站,因为大多数现代网络浏览器和服务器都支持它。
  • 多个证书:为了在同一 IP 地址上托管多个域名,SNI 允许在单个服务器上安装多个 SSL/TLS 证书。
  • 性能提升:SNI 允许服务器处理更多请求并更好地利用其资源,从而可以加快网站速度。
  • 增强安全性:为了提高安全性并抵御中间人攻击,SNI 确保为每个域名使用适当的 SSL/TLS 证书。
  • 灵活性:SNI 通过托管多个域提供灵活性,即 SNI 允许单个服务器托管不同的网站,每个网站都有自己的 SSL/TLS 证书。

服务器名称指示的优点

以下是服务器名称指示的四个优点:

  • 更好地利用资源:使用 SNI 的主要优点是它允许在单个 IP 地址上托管多个 SSL 证书。这将有助于消除浪费并最大化资源效率。
  • 简化管理:服务器名称指示通过允许在单个 IP 地址上托管多个 SSL 证书,最大限度地降低了 SSL 证书管理的复杂性。
  • 支持虚拟主机:由于 SNI 与虚拟主机的兼容性,托管 SSL 证书的成本进一步降低。
    虚拟主机是在单个服务器上运行多个网站的过程,允许不同域共享 CPU、内存和存储等服务器资源。虚拟主机还允许网站所有者在单个物理服务器上托管多个网站,这消除了对额外服务器的需求并有助于降低成本。
  • 提高服务器效率:服务器名称指示通过减少 SSL 证书所需的 IP 地址数量来提高服务器效率。

服务器名称指示的局限性

除了 SNI 的优点之外,它也有一些局限性,如下所述:

  • 仅限于 HTTPS:服务器名称指示仅用于 HTTPS 连接。因此,它对 FTP 或 SMTP 等其他协议没有优势。
  • 缺乏加密 SNI 支持:服务器名称指示的信息在 TLS 握手期间以纯文本形式传输,这使得第三方有可能查看正在访问的网站的域名。为了克服这个限制,我们可以使用加密 SNI,但许多系统不支持它。
  • 复杂性:服务器名称指示增加了 SSL/TLS 协商过程的复杂性,这可能导致更多的设置错误或 SSL 证书管理错误。
  • 性能:SNI 可能会在客户端和服务器之间增加额外的往返次数,这可能会增加延迟并降低性能。
  • 每个 IP 地址一个证书:SNI 的主要缺点是它为一个 IP 地址使用一个证书。如果许多网站在同一 IP 地址下托管不同的证书,这可能会造成问题。