服务器名称指示(SNI)是 TLS 协议的重要组成部分,它允许使用不同 SSL 证书的多个网站共享一个 IP 地址。 这样就不需要为每个域设置单独的 IP 地址,从而提高了虚拟主机的效率和成本效益。 在使用 SNI 之前,托管 SSL 安全网站需要多个 IP,从而增加了成本和复杂性。 现在,企业可以在一台服务器上保护多个域的安全。
在本文中,我们将解释 SNI 是什么、它如何工作、它有哪些优点以及为什么它已成为高效托管安全网站的关键。
目录
- 什么是 SNI(服务器名称指示)?
- 服务器名称指示如何工作?
- SNI 解决的问题
- SNI 的历史与发展
- 使用 SNI 的好处
- SNI 和 SSL/TLS 证书
- 与 SNI 的兼容性问题
- 与 SNI 相关的安全和隐私问题
什么是 SNI(服务器名称指示)?
服务器名称指示(SNI)是传输层安全(TLS)协议的扩展。 它允许客户端(如网络浏览器)在 TLS 握手过程中指定要访问的域名。 通过这一过程,网络服务器可以在单个 IP 地址上承载具有单独 SSL/TLS 证书的多个域。
如果没有 SNI,服务器就不知道要提交哪个证书,从而可能导致错误,造成连接失败。 SNI 在完全建立连接之前就能显示客户端连接的域,因此在解决这个问题上发挥了至关重要的作用。
服务器名称指示如何工作?
SNI 是 TLS 握手是 TLS 握手过程的一部分,当客户端(如浏览器)尝试与服务器建立安全连接时,就会发生握手过程。 下面是其工作原理的详细介绍:
- 客户端向服务器发送客户端 “你好“信息,其中包括 SNI 扩展名,指定其尝试连接的域名。
- 服务器会查看 SNI 字段,并根据请求的域名选择合适的SSL/TLS 证书。
- 提交证书后,TLS 握手过程照常进行,以确保连接的加密和安全。
这一过程可防止出现 “通用名称不匹配 “错误,即 SSL 证书与客户端试图访问的域名不匹配。 SNI 可确保为托管在同一 IP 地址上的每个域提供正确的证书。
SNI 解决的问题
在引入 SNI 之前,网络服务器需要为每个使用自己 SSL 证书的域提供单独的 IP 地址。 这带来了一个很大的问题,尤其是随着IPv4 地址的耗尽。 由于 IPv4 仅限于约 43 亿个唯一地址,许多托管服务提供商难以在有限的 IP 地址上容纳多个域。
SNI 允许在同一 IP 地址上托管具有独立证书的多个域,从而解决了这一问题。 例如,如果没有 SNI,像 GoDaddy 这样托管数百万个域的公司就需要为每个使用HTTPS 的域设置单独的 IP 地址。 SNI 消除了这一限制,允许一台服务器在一个 IP 上托管多个域。
SNI 的历史与发展
SNI 于 2003 年正式推出,是传输层安全(TLS)协议扩展的一部分。 起初,并非所有浏览器和服务器都支持 SNI,但随着互联网使用的扩大和对更高效托管解决方案的迫切需求,对 SNI 的支持不断增加。
如今,大多数现代浏览器和服务器都支持 SNI,使其成为虚拟主机基础设施的基本组成部分。 不过,仍有一些传统系统(如Windows XP和旧版本的安卓系统)不支持 SNI,这可能会导致兼容性问题。 尽管如此,SNI 已成为在共享服务器上托管多个 SSL 安全网站的标准解决方案。
使用 SNI 的好处
SNI可为网站所有者和托管服务提供商带来几大好处。 这些优势包括
- 成本效益:通过允许多个域共享一个 IP 地址,SNI 减少了对额外 IP 地址的需求。 鉴于IPv4 地址枯竭问题,可用的 IPv4 地址正在迅速减少,这一点尤为重要。
- 简化托管:SNI 使托管服务提供商可以从同一服务器和 IP 地址为多个受 SSL 保护的网站提供服务。 这消除了为不同 SSL 证书管理多个 IP 的复杂性。
- 改进资源分配:托管服务提供商可以在更少的服务器上运行多个域,同时为每个网站保持 HTTPS 加密,从而节省宝贵的资源。
此外,由于IPv6的采用仍在进行中,SNI 提供了一个临时但有效的解决方案,以管理在有限的 IPv4 地址池中托管的越来越多的网站。
SNI 和 SSL/TLS 证书
SNI 的关键作用之一是允许在单个服务器或 IP 地址上使用多个 SSL/TLS 证书。 传统上,当网站托管在同一服务器上时,每个域都需要自己的专用 IP,以防止 SSL 冲突。 然而,SNI 可确保根据TLS 握手过程中请求的主机名正确分配每个域的证书,从而消除了这一要求。
SNI 与各种 SSL 证书兼容,包括
- 单域 SSL 证书:对于单个网站,SNI 可使这些证书无缝运行,而无需唯一的 IP 地址。
- 多域 (SAN) SSL 证书:SNI 还可与主题备选名称 (SAN)证书结合使用,后者允许单个证书覆盖多个域。 虽然 SAN 证书可以简化 SSL 管理,但它们往往比与 SNI 搭配使用的单个证书更大、更不灵活。
SNI 还支持最新版本的TLS,包括TLS 1.2和TLS 1.3,提供更强的加密能力和性能。
与 SNI 的兼容性问题
虽然 SNI 得到了现代浏览器和操作系统的广泛支持,但它在与旧系统的兼容性方面确实存在一些问题。 这些问题包括Windows XP上的旧版本Internet Explorer和过时的Android(2.3 之前)版本。
如果客户端使用不支持 SNI 的浏览器或操作系统,服务器可能无法提供正确的 SSL 证书,从而导致“名称不匹配 “错误或不安全连接警告。
不支持 SNI 的客户端的变通方法包括
- 为域名分配专用 IP 地址。
- 使用多域证书(SAN),在单个证书中包含所有相关域。
幸运的是,随着现代浏览器和系统采用率的提高,受此问题影响的用户比例正在减少。
与 SNI 相关的安全和隐私问题
虽然 SNI 解决了许多主机托管难题,但也存在安全和隐私问题。 一个值得注意的风险是,SNI 会在 TLS 握手过程中暴露网站的主机名。 这可能会让第三方(如网络窃听者)看到用户试图访问的网站,即使会话的其他部分是加密的。
为解决这一隐私问题,引入了加密 SNI(ESNI)。在 TLS 握手过程中,ESNI会加密客户端 “你好 “信息中的主机名,防止外界看到用户连接的域名。
除 ESNI 外,HTTPS 上的DNS(DoH)和TLS1.3 等新技术也在不断发展。 TLS 1.3等较新的技术可增强隐私和安全性,确保从连接开始就对主机名和用户数据进行加密。
底线
服务器名称指示(SNI)是一项关键技术,它允许在单个 IP 地址上托管多个 SSL 安全网站,使虚拟主机提供商更具成本效益和灵活性。 随着 SSL 证书需求的增长,SNI 可确保企业为多个域提供安全的加密连接,而无需额外的 IP 地址。
如果您想使用 SSL 证书保护您的网站、 SSL Dragon提供多种经济实惠的选择,从单域证书到通配符 SSL和多域 SSL (SAN) 证书,确保您可以轻松利用 SNI,同时保证数据和客户的安全。