域名解析原理与网络接入
12.6 HTTPS与网络协议
Tip
HTTP 是明文传输的。就像如果你在教室传纸条,中间经过的所有同学(路由器、ISP)都能看到纸条上的内容。HTTPS (Secure) 就是把纸条放进保险箱里再传。
1. 为什么要学这个?
你在星巴克连了公共 WiFi。 你登录了一个 HTTP 网站。 黑客坐在角落里,用 Wireshark 抓了个包。 你的密码明文显示在他的屏幕上。 你的账号没了。
在 2024 年,没有 HTTPS 的网站就是“裸奔”。
2. 核心概念:隐形保镖
HTTPS = HTTP + TLS (加密层)。
2.1 握手流程 (通俗版)
- Client Hello: 浏览器说:“我要建立安全连接,支持这些加密算法。”
- Server Hello: 服务器说:“好的,这是我的 证书 (Certificate),证明我是谷歌。”
- Verify: 浏览器问公证处 (CA):“这张证书是真的吗?” CA:“是真的。”
- Key Exchange: 浏览器和服务器协商出一个 对称密钥 (Session Key)。
- Encrypted Data: 之后的数据传输,都用这个密钥加密。
3. 解决方案 (HOW)
3.1 免费证书获取
过去证书很贵,现在感谢 Let's Encrypt,证书免费了。
- Vercel / Netlify: 自动申请、自动续期 (Autopilot)。你什么都不用做。
- Nginx (自建): 使用
certbot工具。
# Ubuntu 下一键配置 Nginx 的 HTTPS
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
3.2 握手流程图
graph TD
Client["浏览器"] -->|"Step 1: Client Hello"| Server["服务器"]
Server -->|"Step 2: 发送证书 (公钥)"| Client
Client -->|"Step 3: 验证证书 (找 CA)"| CA["CA 机构"]
Client -->|"Step 4: 生成随机密钥 (用公钥加密)"| Server
Server -->|"Step 5: 解密得到密钥"| Server
Client <-->|"Step 6: 加密传输 (HTTPS)"| Server
style CA fill:#fff9c4,stroke:#fbc02d
style Client fill:#e1bee7,stroke:#8e24aa
style Server fill:#c8e6c9,stroke:#2e7d32
4. 避坑指南
| ❌ 不要这样做 | ✅ 应该这样做 | 为什么 |
|---|---|---|
| 手动上传证书 | 自动续期 (ACME) | 证书通常只有 3个月或 1年有效期。依靠人工记忆一定会忘,忘了就全站不可用。 |
| Mixed Content | 全站 HTTPS | 网页是 HTTPS,图片链接却是 HTTP。此时浏览器不会显示“小锁头”,仍然是不安全的。 |
| 无 HSTS | 开启 HSTS | 强制浏览器始终使用 HTTPS 访问你的网站,防止中间人通过 SSL Strip 降级攻击。 |
5. 真实案例
Story
2018年,过期证书引发的血案
2018年,电信巨头 Ericsson (爱立信) 的软件证书过期。 导致英国 O2、日本 SoftBank 等数千万手机用户集体断网。 原因仅仅是一个运营人员忘记去点那个“Renew”按钮。
Vibe 心法:信誉建立在加密的基础之上。证书续期不应依赖人类的记忆力,而应寄托于全自动的脚本周期 (Cron Job)。将重复的维护任务交给机器,是保证网站 7x24 小时“小锁头”长绿的唯一方案。
6. 本章小结
- 标配:现在没有 HTTPS 的网站浏览器会直接报红。
- 自动:能用 Vercel 自动管就别自己管。
- Let's Encrypt:推进互联网加密的最大功臣,独立开发者的好朋友。