大家好,我卡颂。

最近,群里一个刚入职的小伙因为用公司电脑拜访奇怪的网站,被约谈了。他很困惑 —— 拜访的都是HTTPS的网站,公司咋知道他拜访了啥?

都用HTTPS了,还能被查出浏览记录?

实际上,因为网络通讯有很多层,即便加密通讯,仍有很多途径露出你的拜访地址,比方:

  • DNS查询:通常DNS查询是不会加密的,所以,能看到你DNS查询的观察者(比方运营商)是能够推断出拜访的网站

  • IP地址:假如一个网站的IP地址是独一无二的,那么只需看到目标 IP地址,就能推断出用户正在拜访哪个网站。当然,这种方法关于多网站共享同一个IP地址(比方CDN)的状况不好使

  • 流量分析:当拜访一些网站的特定页面,可能导致特定巨细和顺序的数据包,这种形式可能被用来辨认拜访的网站

  • cookies或其他存储:假如你的浏览器有某个网站的cookies,显然这代表你曾拜访过该网站,其他存储信息(比方localStorage)同理

除此之外,还有很多方法能够直接、直接知道你的网站拜访状况。

本文将聚焦在HTTPS协议自身,聊聊只考虑HTTPS协议的状况下,你的隐私是如何泄露的。

欢迎围观朋友圈、加入人类高质量前端沟通群,带飞

HTTPS简介

我们每天拜访的网站大部分是根据HTTPS协议的,简单来说,HTTPS = HTTP + TLS,其中:

  • HTTP是一种应用层协议,用于在互联网上传输超文本(比方网页内容)。因为HTTP是明文传递,所以并不安全

  • TLS是一种安全协议。TLS传输层对数据进行加密,确保任何灵敏信息在两头(比方客户端和服务器)之间安全传输,不被第三方窃取或篡改

所以理论上,结合了HTTPTLS特性的HTTPS,在数据传输进程是被加密的。但是,TLS树立衔接的进程却不一定是加密的。

TLS的握手机制

当我们经过TLS传递加密的HTTP信息之前,需求先树立TLS衔接,比方:

  • 当用户首次拜访一个HTTPS网站,浏览器开端查询网站服务器时,会发生TLS衔接

  • 当页面恳求API时,会发生TLS衔接

树立衔接的进程被称为TLS握手,根据TLS版别不同,握手的步骤会有所区别。

都用HTTPS了,还能被查出浏览记录?

但总体来说,TLS握手是为了到达三个目的:

  1. 洽谈协议和加密套件:通讯的两头承认接下来运用的TLS版别及加密套件

  2. 验证省份:为了避免“中间人”攻击,握手进程中,服务器会向客户端发送其证书,包括服务器公钥和证书授权中心(即CA)签名的身份信息。客户端能够运用这些信息验证服务器的身份

  3. 生成会话密钥:生成用于加密接下来数据传输的密钥

TLS握手机制的缺点

尽管TLS握手机制会树立安全的通讯,但在握手初期,数据却是明文发送的,这就造成隐私走漏的风险。

在握手初期,客户端、服务端会顺次发送、接纳对方的打招呼信息。首先,客户端会向服务端打招呼(发送client hello信息),该音讯包括:

  • 客户端支撑的TLS版别

  • 支撑的加密套件

  • 一串称为客户端随机数client random)的随机字节

  • SNI等一些服务器信息

服务端接纳到上述音讯后,会向客户端打招呼(发送server hello音讯),再回传一些信息。

其中,SNIServer Name Indication,服务器名称指示)就包括了用户拜访的网站域名

那么,握手进程为什么要包括SNI呢?

这是因为,当多个网站保管在一台服务器上并共享一个IP地址,且每个网站都有自己的SSL证书时,那就没法经过IP地址判别客户端是想和哪个网站树立TLS衔接,此时就需求域名信息辅助判别。

打个比方,快递员送货上门时,假如快递单只有收货的小区地址(IP地址),没有具体的门牌号(域名),那就没法将快递送到正确的客户手上(与正确的网站树立TLS衔接)。

所以,SNI作为TLS的扩展,会在TLS握手时附带上域名信息。因为打招呼的进程是明文发送的,所以在树立HTTPS衔接的进程中,中间人就能知道你拜访的域名信息。

企业内部防火墙的拜访控制和安全策略,便是经过分析SNI信息完成的。

尽管防火墙可能已经有授信的证书,但能够先分析SNI,根据域名状况再判别要不要进行深度查看,而不是对所有流量都进行深度查看

那么,这种状况下该如何保护个人隐私呢?

Encrypted ClientHello

Encrypted ClientHello(ECH)是TLS1.3的一个扩展,用于加密Client Hello音讯中的SNI等信息。

当用户拜访一个启用ECH的服务器时,网管无法经过观察SNI来窥探域名信息。只有目标服务器才干解密ECH中的SNI,从而保护了用户的隐私。

当然,关于授信的防火墙还是不可,但能够增加查看的成本

开启ECH需求一起满意:

  • 服务器支撑TLSECH扩展

  • 客户端支撑ECH

比方,cloudflare SNI测试页支撑ECH扩展,当你的浏览器不支撑ECH时,拜访该网站sni会返回plaintext

都用HTTPS了,还能被查出浏览记录?

关于chrome,在chrome://flags/#encrypted-client-hello中,配置ECH支撑:

都用HTTPS了,还能被查出浏览记录?

再拜访上述网站,sni假如返回encrypted则代表支撑ECH

总结

尽管HTTPS衔接自身是加密的,但在树立HTTPS的进程中(TLS握手),是有数据明文传输的,其中SNI中包括了服务器的域名信息。

尽管SNI信息的本意是处理同一IP下布置多个网站,每个网站对应不同的SSL证书,但也会走漏拜访的网站地址

ECH经过对TLS握手进程中的灵敏信息(主要是SNI)进行加密,为用户供给了更强的隐私保护。