Server Name Indication (SNI) 是 TLS(传输层安全协议)中的一个扩展,允许客户端在建立安全连接时,告诉服务器它要访问的具体主机名(域名)。这个信息通常在 SSL/TLS 握手过程中被传递,特别是在 客户端和服务器之间交换加密信息之前。
SNI 解决了一个关键的问题:多个域名共享同一个 IP 地址时,如何让服务器知道该为哪个域名提供证书。没有 SNI 的话,服务器就无法在同一个 IP 上区分不同的主机名,导致无法为每个网站提供不同的 SSL/TLS 证书。
SNI 的工作原理:
- 客户端发送请求:在发起 SSL/TLS 握手时,客户端(通常是浏览器)会将它访问的目标主机名(域名)包含在 ClientHello 消息中。这一信息作为 SNI 扩展 被发送。
- 服务器处理请求:服务器收到请求后,查看 SNI 中包含的域名,并根据这个域名选择对应的 SSL/TLS 证书。服务器可以使用不同的证书为不同的域名提供安全连接。
- 继续握手和加密连接:根据客户端提供的 SNI 信息,服务器和客户端继续完成 TLS 握手,建立加密连接,并开始安全地交换数据。
为什么 SNI 很重要?
- 多个网站共享同一 IP 地址:
- 在没有 SNI 的情况下,如果多个网站