目录
为什么需要加密?HTTPS 与 TLS 加密了什么
明文传输能被谁看到?用最少的数学讲清对称加密、非对称加密和证书,再用一张时序图逐步标出 HTTPS 保护了什么、仍然暴露了什么,以及加密隧道在此基础上多保护了哪些。
网络原理系列:① 打开一个网页时发生了什么 → ② 网络分层模型 → ③ 常见网络协议 → ④ 代理是什么 → ⑤ 加密隧道是什么 → ⑥ 加密隧道与代理的区别 → ⑦ HTTPS 加密了什么 → ⑧ 系统代理与 TUN 模式 → ⑨ 分流是什么 → ⑩ DNS 污染与泄漏 → ⑪ 晚高峰为什么变慢 → ⑫ 延迟、丢包与带宽
HTTPS 加密的是「信的内容」,不是「信封」。网页内容、网址路径、Cookie、你填写的账号密码,在你和网站之间都是加密的;但你访问的网站域名(DNS 查询和握手里的 SNI)、对方的 IP 地址、访问的时间和流量大小,沿途的人仍然能看到。加密隧道在此基础上把「信封」也包了起来:沿途只能看到你在和隧道服务器通信。
- ① 内容加密网址路径、Cookie、密码、网页内容
- ② 地址看得见访问的域名(DNS 查询、SNI)和 IP
- ③ 时间和大小看得见什么时候访问、传了多少数据
- ④ 沿途的旁观者同一 Wi-Fi、运营商、网络节点
- ⑤ 网站只有它能拆开信封、读到内容
明文传输能被谁看到?
数据从你的设备到网站,要经过一长串「中间人」:
- 同一个 Wi-Fi 里的其他人:在咖啡店、机场的开放 Wi-Fi 里,借助常见的抓包工具就能看到别人的明文流量;
- 热点和路由器的提供者:所有流量都经过他们的设备;
- 运营商:你的全部上网流量都经过运营商的网络;
- 沿途的各个网络节点:跨城、跨国的骨干网和交换中心。
如果数据是明文的(例如 http:// 开头的网站),这些人不仅能看到内容,还能篡改它:插入广告、替换下载链接、在网页里注入恶意代码。这就是现在几乎所有网站都启用 HTTPS 的原因。
用最少的数学讲清加密
对称加密:一把钥匙开一把锁
加密和解密用同一把密钥,速度很快,适合加密大量数据,常见的算法如 AES、ChaCha20。问题是:双方怎么在一个可能被偷听的网络上,安全地约定这把共同的密钥?
非对称加密:公开的锁和私藏的钥匙
每一方有一对密钥:公钥可以公开给所有人,私钥只有自己知道。用公钥加密的东西只有对应的私钥能解开;用私钥「签名」的东西,任何人都能用公钥验证确实出自私钥的主人。
更进一步,现代 TLS 用的是密钥交换(如 ECDHE):双方各自生成一组临时参数,只交换其中可以公开的部分,就能各自算出同一把共享密钥,而旁观者即使看到了所有交换内容也算不出来。这把共享密钥就是后面对称加密用的会话密钥。
证书:证明「你就是你」
光有加密还不够,还得确认对方真的是这个网站,而不是冒充者。网站会出示一张证书,上面写着域名和网站的公钥,并由一家**受信任的证书机构(CA)**签名。浏览器和操作系统内置了这些机构的列表,能验证签名是否真实、证书是否过期、域名是否匹配。冒充者拿不到正确的证书,浏览器就会弹出警告。
HTTPS 保护了什么、仍然暴露什么
下面这张时序图把打开一个 HTTPS 网站的过程逐步展开,标出每一步沿途的旁观者能看到什么:
| 步骤 | 发生了什么 | 旁观者能看到 |
|---|---|---|
| ①–② DNS 查询 | 浏览器询问域名对应的 IP,默认走明文的 UDP | 你要访问的域名,以及查到的 IP |
| ③ TCP 握手 | 和网站的 IP 地址的 443 端口建立连接 | 网站的 IP 地址 |
| ④ ClientHello | TLS 握手的第一条消息,里面带着要访问的域名(SNI),以便服务器出示对应的证书 | 网站的域名(SNI 是明文的) |
| ⑤ ServerHello | 服务器回应;在 TLS 1.3 中,从证书开始的内容就已经加密 | 握手正在进行,看不到证书内容 |
| ⑥ 请求 | 网址的路径和参数、Cookie、表单、账号密码 | 看不到,只能看到数据大小和时间 |
| ⑦ 响应 | 网页内容、图片、下载的文件 | 看不到,只能看到数据大小和时间 |
总结一下:
| 内容 | HTTPS 下是否可见 |
|---|---|
| 访问的网站域名 | 可见(DNS 查询、SNI) |
| 网站的 IP 地址 | 可见 |
| 访问时间、持续多久、传了多少数据 | 可见 |
具体网址路径(如 /search?q=…) | 加密 |
| 网页内容、图片、视频 | 加密 |
| Cookie、登录状态、账号密码、表单 | 加密 |
加密隧道在 HTTPS 之上多保护了什么
加密隧道并不取代 HTTPS,两者是叠加的关系:网页内容先被 HTTPS 加密一次,整个连接再被隧道加密一次。加密隧道额外遮住的,正是 HTTPS 露在外面的「信封」:
| 内容 | 只用 HTTPS | HTTPS + 加密隧道 |
|---|---|---|
| 访问了哪些域名 | 沿途可见 | 沿途只看到隧道服务器 |
| 网站的 IP 地址 | 沿途可见 | 沿途只看到隧道服务器 |
| DNS 查询 | 默认明文 | 在隧道内完成 |
| 不支持 HTTPS 的老网站、App 的明文连接 | 完全可见 | 在隧道内加密 |
| 网页内容 | 加密 | 加密 |
需要注意,隧道服务器这一端在解密后会看到你访问的域名,所以选择服务商时要看它是否承诺并在技术上做到不记录日志,详见 加密隧道是什么。
相关阅读
- 上一篇:加密隧道与代理有什么区别?
- 下一篇:系统代理、全局模式与 TUN 模式:三种接管网络的方式
- 打开一个网页时发生了什么?(TLS 握手的完整时序图)
常见问题
浏览器地址栏的锁图标代表网站是安全的吗?
只代表你和这个网站之间的连接是加密的,并且对方确实持有这个域名的证书。它不代表网站本身可信:钓鱼网站也可以申请证书、显示锁图标,所以仍要留意域名拼写是否正确。
用了 HTTPS,公司网络还能看到我在干什么吗?
看不到网页的具体内容,但能看到你访问了哪些域名、什么时候、传了多少数据。另外,如果公司电脑上被安装了公司的根证书,公司网关可以解密 HTTPS 流量,这在企业管理的设备上很常见。
什么是加密 DNS 和 ECH?
都是为了补上 HTTPS 的「漏洞」。加密 DNS(DoH / DoT)让查询域名的过程也加密;ECH(加密的 ClientHello)把握手里明文的域名 SNI 也加密。两者都在逐步普及,需要浏览器、系统和网站同时支持。