SNI是“Subject Name Indication”的缩写,中文翻译为“主题名称指示”,它是TLS(Transport Layer Security)协议的一部分,用于在客户端和服务器之间建立安全连接时指定加密套件,SNI的主要作用是在握手阶段帮助客户端选择正确的服务器证书。
(图片来源网络,侵删)
以下是关于SNI的详细解释:
1、背景
TLS协议是一种用于保护网络通信安全的协议,它位于TCP/IP协议栈的应用层和传输层之间。
TLS握手过程是客户端和服务器协商加密参数的过程,包括选择加密算法、密钥交换方式等。
2、问题
在TLS握手过程中,客户端需要知道与哪个服务器进行通信,以便选择合适的服务器证书。
如果一个服务器托管多个域名,那么客户端如何确定与哪个域名对应的服务器证书呢?
3、SNI的作用
SNI解决了上述问题,它允许客户端在握手阶段指定要连接的域名。
服务器根据接收到的SNI信息,选择与之匹配的服务器证书。
4、SNI的使用场景
虚拟主机:一个服务器上托管多个域名,每个域名对应一个独立的网站。
SSL加速:CDN(内容分发网络)提供商使用SNI来选择与客户端请求的域名对应的服务器证书。
HTTPS重定向:当客户端访问一个HTTPS网站时,可能会发生重定向,此时SNI可以帮助客户端选择正确的服务器证书。
5、SNI的实现
在TLS握手过程中,客户端发送ClientHello消息,其中包含SNI字段。
服务器根据接收到的SNI字段,选择与之匹配的服务器证书。
6、SNI的限制
并非所有浏览器都支持SNI,例如早期的Internet Explorer不支持SNI。
部分服务器可能不支持SNI,这会导致客户端无法选择正确的服务器证书。
评论(0)