在航站楼候机、咖啡厅赶稿,或者酒店大厅等一趣航班,手机弹出一个开放的WiFi信号,点连接,然后继续该干啡干啡——这个动作大多数人一天要重复好几次。很少人会停下来想:同一个网络里还有没有别人,对方理论上又能看到什么。这篇文章想把公共WiFi场景下数据到底怎么被看到、HTTPS这层加密到底管不管用、还差哪一块,按原理摆一遍。
公共WiFi到底有什么风险
家里的路由器只有你和家人在用,公共WiFi的特殊之处在于:接入的设备互相不认识,彼此也没有天然的隔离。理想情况下,一个设计良好的公共网络会把每个客户端隔离开,谁也看不到谁的流量;但现实中不少商用热点为了兼容性和部署成本,并没有严格做到这一点,同一网段内的设备理论上有机会截获彼此的流量。
更值得留意的是几种主动手法。一种是ARP欺骗:在同一网段内,设备之间靠ARP协议确认彼此的物理地址,如果有人伪造应答,冒充网关的身份,你的流量就可能被引导着先经过对方设备,再转发出去。另一种是伪造热点,业内常叫双胞胎热点或者仿冒热点,起一个和官方WiFi几乎一样的名字,专等你连错,连上之后你的所有流量自然先经过它。这些手法的共同点是:攻击者不需要破解任何密码,只要和你处在同一个物理空间、同一个网络里,就具备了观察甚至插一脚的条件。这是公共WiFi区别于家庭网络的根本原因,也是后面讨论加密该补在哪一层的前提。
HTTPS已经加密了,为什么还不够
这也是很多人本能的疑问:现在打开网站,地址栏几乎都是那把小锁,HTTPS已经很普及了,为什么还要多此一举?要回答这个问题,得先弄清楚HTTPS到底加密了哪一段、哪些内容。
HTTPS加密的是内容,不是整个过程
HTTPS的本质,是在你的设备和目标网站服务器之间建立一条加密通道:你提交的表单、输入的密码、页面返回的正文,这些数据在传输过程中都会被加密。即使有人在同一个公共WiFi下把数据包整段截下来,打开看到的也是一串无法直接还原的密文。这部分保护是扮实的,不需要怀疑。
DNS查询和SNI字段,还留在明处
但在正式建立这条加密通道之前,有两步动作大多数时候是明文的。第一步是DNS查询:设备要先把你输入的域名换算成一个IP地址才知道该连去哪,这次查询请求默认通过明文方式发出,同一网络里能看到流量的人,原则上可以看到这次查询问的是哪个域名。第二步是TLS握手阶段的SNI字段,也就是Server Name Indication:你的浏览器要告诉服务器接下来想访问哪个网站,这个字段在传统TLS握手里同样是明文的,哪怕紧接着的正文已经全部加密。换句话说,内容本身被锁住了,但你敲的是哪扇门,同一网络里的旁观者大概率还是看得见。业内已经有加密SNI的方案,通常叫ECH,但截至目前服务器端的支持还在陆续铺开,并不是所有网站默认都已经开启。
VPN、加密隧道补上了哪一层
知道了HTTPS的边界在哪,再看加密隧道类工具(通常说的VPN)在解决什么问题,会更容易理解。它的思路不是给HTTPS本身再加一把更粗的锁,而是换了一个更靠外层的做法:把设备发出的所有流量,包括DNS查询和TLS握手在内,一整条打包装进一条从设备直连到远端服务器的加密隧道。对同一公共WiFi里的其他设备或者热点运营方来说,能看到的只剩一条流向固定服务器、内容加密的连接,至于这条隧道内部实际访问的是哪个域名、发生了什么请求,已经不在这个网络能观察的范围里了。
拿正在用的TonBoVPN举例,连接建立之后,本地网络这一侧确实就只能看到上面说的这条加密隧道,域名解析和SNI这些原本暴露的信息都被卷进隧道里一起处理了。所以TonBoVPN这类工具常说的多一层保护,准确说保护的是本地网络这一段的可视范围,而不是把内容重新加密得比HTTPS更彻底——内容那部分,HTTPS已经做到位了。也正因为这样,隧道出口之后、到达真正目标网站之前的这一段,原理上和不叠加隧道时是一样的,该用HTTPS的地方还得用HTTPS。
两层加密到底怎么分工
把两段拼起来看会更清楚:HTTPS负责的是端到端的内容加密,不管你身处哪个网络,只要网站本身支持HTTPS,这部分保护始终都在;加密隧道负责的是本地网络这一段的可视范围,它只在你接入某个具体网络时才有意义,换到一个可信的网络,这层保护的必要性也会跟着下降。两者不是谁替代谁,而是各管一段。
对日常使用来说,不需要靠猜测判断风险大小,原理上讲得通的判断标准反而更简单:凡是会输入密码、验证码、支付信息的场景,先确认网站本身是不是HTTPS;而当你明确知道自己接入的是一个陆生、开放、无法核实运营方身份的网络时,再考虑要不要多加一层隧道,把本地这段的可视范围也一并管起来。风险不是非黑即白的,判断的依据是网络的可信程度,而不是这个WiFi名字看起来正不正规。
| 信息类型 | 仅使用HTTPS时,同网络旁观者能否看到 | 叠加加密隧道后 |
|---|---|---|
| 网页、App传输的具体内容(账号密码、聊天记录、支付信息等) | 看不到,已被HTTPS加密 | 看不到 |
| 访问的域名(TLS握手阶段的SNI字段) | 能看到 | 看不到,已封装进隧道 |
| DNS查询记录(域名换算IP地址的这一步) | 多数情况下能看到 | 看不到,查询经隧道转发 |
| 连接的服务器IP、连接时长、流量大小等元数据 | 能看到 | 只能看到隧道服务器一侧的整体流量 |
几个原理上站得住脚的判断
- 地址栏的锁形图标只说明这个网站启用了HTTPS,不代表你正在连接的网络本身可信
- 输入密码、验证码等敏感信息前,多看一眼网址是不是HTTPS开头,而不是只看WiFi名字像不像官方的
- 如果同一个地点同时出现两个名字很像的WiFi,或者热点完全不需要密码,优先选择需要认证登录的那个,拿不准就先用蜂窝网络
- 加密隧道解决的是同网络旁观者能看到什么这一层问题,不是把内容加密得比HTTPS更彻底,两者的作用范围本来就不一样
说到底,公共WiFi本身并不是洪水猛兽,它缺的只是一层默认的信任保证——你没法验证同一网络里还有谁、热点到底是谁在运营。HTTPS已经把内容这部分的风险降得很低,剩下露在外面的主要是域名和连接记录这类元数据。是否需要再加一层隧道,取决于你对当前网络的信任程度,以及这次连接要不要处理敏感信息。原理想清楚了,判断反而没那么难。
