一个程序员在咖啡厅蹭 WiFi,突然收到一封邮件提醒:"你的账号在陌生设备登录了"。他懵了------自己明明用的是陌生 WiFi,但账号却被别人登录了。他从来没连过什么钓鱼网站,密码也没泄露,怎么回事?
今天聊聊网络抓包的原理,以及怎么保护自己的隐私。
原文地址
先搞清楚:数据是怎么传出去的?
快递员取件
你发一条消息,就像打电话叫快递员来取件:
yaml
你 → 快递员 → 快递站 → ... → 收件人
网络请求也是一样的道理。你的电脑把数据交给路由器,路由器再交给下一站,一站一站传过去,最终到达服务器。
问题来了:一路上谁都能拆开看。
明文时代:谁都能看
HTTP 是明信片
早期互联网用的是 HTTP 协议,就像寄明信片------不装信封,谁都能看。
yaml
┌─────────────────────────────────┐
│ 寄件人:你 │
│ 收件人:mail.example.com │
│ 内容: │
│ │
│ 账号:Tom │
│ 密码:123456 │
│ │
└─────────────────────────────────┘
在咖啡厅、机场这些公共网络里,只要有人装了网络监控软件,就能看到你在访问什么网站、发什么内容。
那个年代的 hacker 就是这么干的。 不用什么高科技,在同一个 WiFi 下,用系统自带的网络查看器就够了。
加密时代:HTTPS 是什么?
HTTPS = HTTP + 加密
后来有了 HTTPS,就像给明信片加了信封,只有收件人能拆开看。
yaml
你 ←──── 加密通道(锁着)────→ 网站
(只有你和网站知道钥匙)
HTTPS 用的是 TLS/SSL 协议,用非对称加密的方式,让只有你和网站能解密内容。中间经过的每一站都只能看到加密后的乱码。
HTTPS 能防住谁?
- 防不住:和你在同一网络的人(比如咖啡厅的黑客)
- 防不住:你电脑上装了证书的抓包工具(比如 Charles)
- 能防住:网络路径上的其他人(运营商、路由器)
也就是说,HTTPS 防的是"网络路径上的窃听",但防不住你电脑上的"内鬼"。
狡猾的黑客:中间人攻击是怎么回事?
Wireshark:网络层的监控摄像头
在介绍 Charles 之前,先说另一个工具------Wireshark。
Wireshark 是网络协议分析工具,能抓到网卡上经过的所有数据包。它工作在网络层,能看到 TCP、UDP、ICMP 等各种协议,不只是 HTTP。
简单说:Wireshark 就像在网络链路上装了个监控摄像头,所有经过的车都能看到。
但 Wireshark 只能看到加密后的乱码,对 HTTPS 无能为力。它适合安全工程师分析网络攻击、查网络底层问题。
Charles:应用层的伪装者
Charles 不一样,它工作在应用层,专门针对 HTTP/HTTPS。
Charles 不暴力破解加密,而是说服你的电脑信任它。
yaml
Charles 的套路:
1. 伪造"收件人"的身份证
2. 你把信给了 Charles(以为在给快递员)
3. Charles 解密看完,再用真身份证寄给收件人
4. 收件人回信,Charles 再加密寄给你
整个过程你毫不知情,还以为在和网站直接通信。
关键是:你的电脑信任了 Charles 的证书。 通常是你自己装的------公司监控软件告诉你"需要装证书才能上网",你点了确定。
Wireshark 和 Charles:各适合什么场景?
| 工具 | 适合场景 | 工作层级 |
|---|---|---|
| Wireshark | 网络协议分析、安全分析、查网络底层问题 | 网络层(能看到所有包) |
| Charles | Web/移动端调试、接口分析、修改请求重放 | 应用层(只看 HTTP/HTTPS) |
Wireshark 适合安全工程师分析攻击,Charles 适合开发者调试接口。
HTTPS 真的安全吗?
证书系统是怎么被利用的?
HTTPS 的安全性依赖于证书------网站向权威机构申请证书,证明"这个网站是我"。
但如果有人拿到了假的证书呢?
yaml
正常 HTTPS 握手:
你 → 请求网站证书 → 网站给你证书 → 你验证证书 → 加密通信
被 Charles 劫持后:
你 → 请求网站证书 → Charles 拦截 → Charles 给你假证书 → 你验证通过 → Charles 解密 → Charles 和网站建立真连接
你的电脑怎么知道证书是假的?因为证书里有一个"颁发者"信息,正常应该是 DigiCert、Google 这些知名机构。如果是 Charles Debug Proxy、TrustAny 这样的名字,就要警惕了。
银行 App 为什么安全?
很多人不知道,大多数银行、支付宝、微信支付这些 App 用的不是普通的 HTTPS,而是证书锁定(Certificate Pinning)。
普通 HTTPS:你电脑里存着"信任的证书机构列表",Charles 只要拿到任何一个被信任的证书就能伪造。
证书锁定:App 里直接写死了"我只信任这个证书",Charles 伪造的证书直接被拒绝。就像公司门禁卡只能刷特定的门,换张卡刷不开。
怎么知道有人在偷看?
1. 看代理设置
打开电脑的网络设置,如果代理指向了一个陌生的 IP,立刻警觉。
yaml
正常:
代理设置 → 空(直连)
可疑:
代理设置 → 192.168.1.100:8888
2. 看证书颁发者
访问 HTTPS 网站时,点击地址栏的锁图标。如果证书颁发者是 Charles Debug Proxy、TrustAny、Fiddler 这些名字,说明你的流量正在被人解密。
3. 看公司网络审计
大公司通常有网络审计系统,你访问了哪些网站、什么时候访问的,都有记录。这也是为什么公司电脑会要求装证书------不是黑客,是合规需要。
怎么保护自己?
1. 公共 WiFi 不要访问敏感信息
咖啡厅、机场的 WiFi 谁都能连,不安全。黑客可能就在你旁边,用简单的工具就能抓到同网络里所有的明文流量。
重要操作尽量用手机流量。
2. 不装来路不明的证书
"安装证书才能上网"------遇到这种情况要警惕。
正常场景:
- 公司电脑需要监控网络安全,会提前通知你安装证书
- 抓包调试时,Charles 会提示你安装证书
异常场景:
- 浏览器突然弹出"安装证书"框
- 不在调试状态,突然要求安装证书
装证书之前,想一想:我现在在干什么?
3. 看网址栏的锁
现在大多数网站都默认 HTTPS 了。访问的时候瞄一眼地址栏,有锁标的说明是加密的,没锁标的要小心。
4. 开启 VPN
VPN 会在你的电脑和服务器之间建立一条加密隧道。即使在公共 WiFi 里,黑客也只能看到你连了 VPN,看不到具体在访问什么。
就像你把信封放进快递箱,再交给快递员。 快递员只能看到箱子,看不到里面是什么。
5. 重要操作用专属网络
转账、登录账号、输入密码这些操作,尽量在自己信任的网络环境下进行。家里的 WiFi比公共 WiFi 安全,自己流量最安全。
总结
互联网早期,数据像明信片一样裸奔。后来有了 HTTPS,数据装进了信封。
但信封可以被伪造。Charles 这类工具就是用证书伪造的方式,让加密形同虚设。
保护自己其实不难:公共网络不传敏感信息、不装来路不明的证书、看好网址栏的锁、重要操作用信任的网络。
网络安全不是工程师的事,是每个人的事。