目录
科普原理

为什么需要加密?HTTPS 与 TLS 加密了什么

明文传输能被谁看到?用最少的数学讲清对称加密、非对称加密和证书,再用一张时序图逐步标出 HTTPS 保护了什么、仍然暴露了什么,以及加密隧道在此基础上多保护了哪些。

最后更新:

HTTPS 加密的是「信的内容」,不是「信封」。网页内容、网址路径、Cookie、你填写的账号密码,在你和网站之间都是加密的;但你访问的网站域名(DNS 查询和握手里的 SNI)、对方的 IP 地址、访问的时间和流量大小,沿途的人仍然能看到。加密隧道在此基础上把「信封」也包了起来:沿途只能看到你在和隧道服务器通信。

插图:一个封蜡上锁的大信封沿路运送,旁观者拿放大镜能看到外面的地址标签和时间,却看不到里面的内容
  1. ① 内容加密网址路径、Cookie、密码、网页内容
  2. ② 地址看得见访问的域名(DNS 查询、SNI)和 IP
  3. ③ 时间和大小看得见什么时候访问、传了多少数据
  4. ④ 沿途的旁观者同一 Wi-Fi、运营商、网络节点
  5. ⑤ 网站只有它能拆开信封、读到内容

明文传输能被谁看到?

数据从你的设备到网站,要经过一长串「中间人」:

  • 同一个 Wi-Fi 里的其他人:在咖啡店、机场的开放 Wi-Fi 里,借助常见的抓包工具就能看到别人的明文流量;
  • 热点和路由器的提供者:所有流量都经过他们的设备;
  • 运营商:你的全部上网流量都经过运营商的网络;
  • 沿途的各个网络节点:跨城、跨国的骨干网和交换中心。

如果数据是明文的(例如 http:// 开头的网站),这些人不仅能看到内容,还能篡改它:插入广告、替换下载链接、在网页里注入恶意代码。这就是现在几乎所有网站都启用 HTTPS 的原因。

用最少的数学讲清加密

对称加密:一把钥匙开一把锁

加密和解密用同一把密钥,速度很快,适合加密大量数据,常见的算法如 AES、ChaCha20。问题是:双方怎么在一个可能被偷听的网络上,安全地约定这把共同的密钥?

非对称加密:公开的锁和私藏的钥匙

每一方有一对密钥:公钥可以公开给所有人,私钥只有自己知道。用公钥加密的东西只有对应的私钥能解开;用私钥「签名」的东西,任何人都能用公钥验证确实出自私钥的主人。

更进一步,现代 TLS 用的是密钥交换(如 ECDHE):双方各自生成一组临时参数,只交换其中可以公开的部分,就能各自算出同一把共享密钥,而旁观者即使看到了所有交换内容也算不出来。这把共享密钥就是后面对称加密用的会话密钥。

证书:证明「你就是你」

光有加密还不够,还得确认对方真的是这个网站,而不是冒充者。网站会出示一张证书,上面写着域名和网站的公钥,并由一家**受信任的证书机构(CA)**签名。浏览器和操作系统内置了这些机构的列表,能验证签名是否真实、证书是否过期、域名是否匹配。冒充者拿不到正确的证书,浏览器就会弹出警告。

HTTPS 保护了什么、仍然暴露什么

下面这张时序图把打开一个 HTTPS 网站的过程逐步展开,标出每一步沿途的旁观者能看到什么:

浏览器 DNS 服务器 沿途旁观者 网站 查地址:默认明文 查询 example.com 1 返回 IP 地址 2 建立连接:地址和域名可见 TCP 握手:目标 IP + 443 端口 3 ClientHello,附带域名 SNI(明文) 4 ServerHello;证书起已加密(TLS 1.3) 5 传输内容:全部加密 请求:网址路径、Cookie、表单、密码 6 响应:网页内容、图片、文件 7
细线是明文,沿途能看到;粗线是加密内容,沿途看不到。中间一列代表运营商、同一 Wi-Fi 等沿途的旁观者。
步骤发生了什么旁观者能看到
①–② DNS 查询浏览器询问域名对应的 IP,默认走明文的 UDP你要访问的域名,以及查到的 IP
③ TCP 握手和网站的 IP 地址的 443 端口建立连接网站的 IP 地址
④ ClientHelloTLS 握手的第一条消息,里面带着要访问的域名(SNI),以便服务器出示对应的证书网站的域名(SNI 是明文的)
⑤ ServerHello服务器回应;在 TLS 1.3 中,从证书开始的内容就已经加密握手正在进行,看不到证书内容
⑥ 请求网址的路径和参数、Cookie、表单、账号密码看不到,只能看到数据大小和时间
⑦ 响应网页内容、图片、下载的文件看不到,只能看到数据大小和时间

总结一下:

内容HTTPS 下是否可见
访问的网站域名可见(DNS 查询、SNI)
网站的 IP 地址可见
访问时间、持续多久、传了多少数据可见
具体网址路径(如 /search?q=…)加密
网页内容、图片、视频加密
Cookie、登录状态、账号密码、表单加密

加密隧道在 HTTPS 之上多保护了什么

加密隧道并不取代 HTTPS,两者是叠加的关系:网页内容先被 HTTPS 加密一次,整个连接再被隧道加密一次。加密隧道额外遮住的,正是 HTTPS 露在外面的「信封」:

内容只用 HTTPSHTTPS + 加密隧道
访问了哪些域名沿途可见沿途只看到隧道服务器
网站的 IP 地址沿途可见沿途只看到隧道服务器
DNS 查询默认明文在隧道内完成
不支持 HTTPS 的老网站、App 的明文连接完全可见在隧道内加密
网页内容加密加密

需要注意,隧道服务器这一端在解密后会看到你访问的域名,所以选择服务商时要看它是否承诺并在技术上做到不记录日志,详见 加密隧道是什么。

相关阅读

常见问题

浏览器地址栏的锁图标代表网站是安全的吗?

只代表你和这个网站之间的连接是加密的,并且对方确实持有这个域名的证书。它不代表网站本身可信:钓鱼网站也可以申请证书、显示锁图标,所以仍要留意域名拼写是否正确。

用了 HTTPS,公司网络还能看到我在干什么吗?

看不到网页的具体内容,但能看到你访问了哪些域名、什么时候、传了多少数据。另外,如果公司电脑上被安装了公司的根证书,公司网关可以解密 HTTPS 流量,这在企业管理的设备上很常见。

什么是加密 DNS 和 ECH?

都是为了补上 HTTPS 的「漏洞」。加密 DNS(DoH / DoT)让查询域名的过程也加密;ECH(加密的 ClientHello)把握手里明文的域名 SNI 也加密。两者都在逐步普及,需要浏览器、系统和网站同时支持。

还没有安装穿山甲?

支持 iPhone / iPad、Mac、Windows 与 Android。新用户注册即送 7 天会员体验。

下载客户端
← 全部文章