HTTP 的报文是明文的,路上一串机器都能看见;TLS 把这条通道加密,顺便证明对面确实是我要访问的那个站。
3-6 讲了挡在中间的反向代理,这一节讲另一层【中间】:加密层。它和代理一样,不在网页内容里露脸,却决定了你的密码会不会被人捡走。教材用的是 SSL 这个老名字,现在实际跑的是 TLS。
一、HTTP 的问题:明信片
HTTP 的报文是纯文本。你在表单里输的账号密码,就是一段看得懂的文字——路上任何一台能截住流量的机器都能直接读出来。
这带来三个问题:被偷看(内容泄露)、被篡改(改完你还不知道)、被冒充(你以为在跟银行说话,其实对面是别人)。
TLS 一次解决这三个:加密解决偷看,完整性校验解决篡改,证书解决冒充。这也是为什么 HTTPS 被叫做【HTTP 加上 TLS】,而不是【另一种 HTTP】。
二、SSL 与 TLS:一个名字的历史
教材写的是 SSL,这是历史叫法。SSL 早期版本早就不安全了,如今实际在用的是它的后继者 TLS。日常口语里大家还是说 SSL,但配置时看到的参数都是 TLS。
握手的过程可以简化成三步:客户端说支持哪些算法 → 服务器给出证书和一个选择 → 双方协商出一把只有彼此知道的会话密钥,之后的内容都用这把钥匙加密。
钥匙是临时生成的,会话结束就作废。这样做的好处是:即使某一次会话的钥匙被拿到,也解不开之前的通话记录。
三、动手 Demo:握手的账与证书的账
TLS 干的事越多,握手就越长;而握手是按往返次数算成本的。
for days, era in [(398, "2026 年 3 月之前"), (200, "2026 年 3 月起"),
(100, "2027 年起"), (47, "2029 年起")]:
print("%s 最长 %d 天,一年要换 %d 次左右" % (era, days, round(365 / days)))
print("TLS 1.2 握手 2 次往返 = 300 ms;TLS 1.3 只需 1 次 = 150 ms")
print("Let's Encrypt 占证书市场的 68.1%")
实跑输出:
--------------------------------------------------------------------
D7 TLS:把浏览器与服务器之间的内容加密
--------------------------------------------------------------------
HTTP 的报文是明文的,中间任何一台机器都能看。TLS 干的就是给这条通道加密,
顺便证明【对面确实是我要访问的那个站】。
版本 握手往返次数 跨太平洋的握手耗时
--------------------------------------------------------------------
TLS 1.2 2 次 300 ms
TLS 1.3 1 次 150 ms
少一次往返,跨洋访问就省下 150 毫秒——这就是新版本被迅速采用的原因。
加密靠证书,而证书是有保质期的。这张表是这两年最大的变化:
时间点 最长有效期 一年要换几次
----------------------------------------------------------------------
2026 年 3 月之前 398 天 1 次左右
2026 年 3 月起 200 天 约 2 次
2027 年起 100 天 约 4 次
2029 年起 47 天 约 8 次
到期时间越缩越短,手工换证书必然出事,所以自动续期已经是必需品。
谁在签发证书(按使用它的网站比例):
证书颁发机构 占网站比例 备注
----------------------------------------------------------------------------
Let's Encrypt 68.1% 免费、自动续期,绝对主力
GlobalSign 20.9% 企业级证书为主
Sectigo 5.1% 老牌商业 CA
GoDaddy Group 3.7% 多与域名一起卖
DigiCert Group 1.7% 高保障证书市场
2026 年的整体进度:
· 90.1% 的网站默认走 HTTPS,前 10 万个站更是到了 94.6%
· 87.0% 的网站挂着一张有效的证书
· 支持 TLS 1.3 的站点约 75.3%,还在用 SSL 2.0 / 3.0 的只剩 1.1%
先看握手那两行:TLS 1.2 要 2 次往返,TLS 1.3 只要 1 次。跨太平洋一次往返 150 毫秒,这一改就省下 150 毫秒——在网络世界里,这已经是很大的数字了。
再看证书有效期那张表,这是这两年最大的变化:从 398 天一路缩到 200 天、100 天,2029 年将是 47 天。一张证书一年最多要换八次,手工换必然出事,所以自动续期已经从【好习惯】变成【必需品】。
最后看谁在签发证书:Let's Encrypt 一家就占了 68.1%。它免费、支持自动续期,正是 HTTPS 普及率能冲到九成的直接推手。
四、2026 年:加密已经是默认
90.1% 的网站默认走 HTTPS,访问量最大的 10 万个站更是到了 94.6%。浏览器对不加密站点的提示也越来越直接——从 2026 年 10 月起,Chrome 会默认开启【始终使用安全连接】。
但加密普及也带来一个新麻烦:攻击者同样会加密。既然人人都能免费拿到证书,钓鱼站自然也用上了,光看地址栏有没有小锁,已经分不出好坏。
所以判断站点是否可信,不能只看有没有加密——要看域名拼写、要看证书签给谁、要看内容是否对得上。加密解决的是【路上不被看】,不是【对面是好人】。
30 秒实验
- 访问任意一个 HTTPS 网站,点地址栏左边的小锁,看证书签发给谁、由谁签发、什么时候到期。
- 故意访问一个纯 HTTP 的站点,观察浏览器给出的提示——对比一下加密与不加密在体验上的差别。
- 在命令行运行
curl -I https://www.baidu.com,看返回头里有没有strict-transport-security这一项——它强制以后都走 HTTPS。
常见误区
- 错误:HTTPS 是一种新的协议。——纠正:它还是 HTTP,只是套了一层 TLS。请求和响应的格式完全没变,变的是传输方式。所以写代码时不用为 HTTPS 改业务逻辑,改的是连接与部署方式。
- 错误:有了小锁就说明这个站是安全的。——纠正:小锁只说明【路上是加密的】。证书是免费发放的,钓鱼站一样能拿到。它证明的是【通道安全】,不是【对方可信】。
- 错误:证书有效期缩短只是行业在折腾。——纠正:缩短有效期是在缩小风险窗口。密钥一旦泄露,能用它冒充的时间就短了。代价是必须自动化——这正是行业想要的:把证书管理变成流水线,而不是人工任务。
- 错误:加密会影响性能,能不上就不上。——纠正:现在的开销已经很低。TLS 1.3 只要 1 次往返,硬件也普遍有加速支持;再加上 HTTP/2 与 HTTP/3 都要求加密,不上 HTTPS 反而用不了新协议。
自测三问(点开对答案)
1. TLS 一次解决了哪三个问题? —— **被偷看**(加密)、**被篡改**(完整性校验)、**被冒充**(证书验证身份)。三个问题对应三样机制,**少一样都算不上安全**。 2. 为什么证书有效期要越缩越短? —— 因为**密钥泄露后的风险窗口等于证书剩余有效期**。有效期越短,被冒用的时间就越短。**代价是必须自动续期**——这也正是行业想要的方向。 3. 为什么地址栏有小锁也不能完全信? —— 因为**证书已经免费且自动化**,任何人都能给自己站点配一个。小锁只说明【你与这个站之间是加密的】,**不说明【这个站就是你想找的那个】**——还得看域名和内容。- ☐ 下一节(3-8 向Web服务器传输文件和识别请求:FTP、端口号)
相关笔记
- 互联网的通信代理 —— 上一节:另一层看不见的中间人
- 确保网络购物的安全性(SSL、混合加密) —— 加密是怎么组合起来的
- 加密使用的公开密钥是真的吗(数字证书) —— 证书要解决的问题
- Web 网站的安全性可通过加密图标确认 —— 安全课里从图标讲起
- 🕸️ Web技术原理 · 索引