HTTPS加密的疏漏——SNI扩展字段

SNI是什么?

维基百科(服务器名称指示)

服务器名称指示(Server Name Indication 简称 SNI)是一个扩展的TLS计算机联网协议,这允许在握手过程开始时通过客户端告诉它正在连接的服务器的主机名称。

作用:允许在相同的IP地址和TCP端口号的服务器上使用多个证书,而不必所有网站都使用同一个证书。在概念上等同于HTTP/1.1基于域名的虚拟主机,只不过这是在HTTPS上实现的。

SNI信息的传输是明文的?

SNI信息是在握手的过程中,确切说是在客户端发送给服务端的第一个握手包中传递的信息。
这时候SSL连接还未建立起来,因此SNI信息是明文传输的。

如下图所示,SNI信息即在第一个SSL握手包中(Client Hello)



具体的SNI信息如下,显然是明文的:



明文的SNI会带来什么后果?

实际会带来的后果并不涉及内容的安全问题,仅仅只是所请求的服务器名称泄露出去了。中间人获得服务器名称,可用于阻断连接之类的攻击。此举常见于网络审查系统,以及服务托管方审查托管的域名。

评论