服务器SNI(Server Name Indication),是一种TLS/SSL协议的扩展功能。在使用TLS/SSL进行加密通信时,服务器需要提供一个数字证书来验证自身的身份。在过去,服务器只能使用一个固定的证书,无法为多个域名或主机名提供不同的证书。这导致在一个服务器上运行多个域名的网站时,只能选择一个域名来使用TLS/SSL加密。
而使用SNI技术之后,服务器就可以根据客户端请求的域名或主机名动态选择相应的证书。这使得在一个服务器上运行多个域名的网站时,可以为每个域名分配不同的证书,从而提供不同的TLS/SSL加密。SNI技术可以在TLS握手过程中,通过在ClientHello报文中提供所请求的域名或主机名来实现。
在使用SNI技术的情况下,TLS握手过程大致如下:
客户端向服务器发送一个ClientHello报文,其中包含所请求的域名或主机名。
服务器端接收到ClientHello报文后,根据其中的域名或主机名,在服务器上查找对应的证书。如果找到了匹配的证书,服务器就会使用该证书进行后续的TLS握手过程。
如果服务器找不到匹配的证书,或者客户端不支持SNI技术,服务器会使用默认的证书进行后续的TLS握手过程。这意味着客户端和服务器之间的通信将不会使用TLS/SSL加密,而是以明文方式进行通信。
总结起来,服务器SNI是一种用于支持在一个服务器上运行多个域名的网站时,为每个域名动态选择不同证书的技术。它通过在TLS握手过程中提供所请求的域名或主机名,使服务器能够选择正确的证书来进行加密通信。