HTTPS 协议
1. HTTP 明文风险:谁看得到
HTTP 是明文传输。 只要是 http 的请求(URL、表单、Cookie、Authorization 头),路径上的每个节点都能直接读取,不需要"破解"。
按风险等级的场景:
| 场景 | 风险 | 说明 |
|---|---|---|
| 公共 WiFi | 高 | 同网任意设备可抓包(Wireshark 傻瓜式操作) |
| 校园网/公司网关 | 中-高 | 网关天然记录经过的所有明文流量 |
| 运营商/ISP | 中 | 可缓存、重定向、注入;国内有运营商插入广告/重定向的公开报道 |
| DNS 污染/劫持 | 高(主动攻击) | 域名解析到恶意 IP,用户在假服务器上输入密码,无法察觉 |
诚实评估: 普通人不会"被专人盯上抓密码",但明文流量被"路径上的节点记录"是结构性的常态。密码泄露往往不是被黑,而是流量被记录后某天被批量利用/撞库。
关键认知:base64 只是编码,不是加密。 浏览器弹窗里的 Authorization: Basic base64(user:password) 抓到包即可还原明文。
2. 为什么浏览器输入域名默认 http?
HTTP 规范规定:无协议前缀时默认 http://。
风险点: 即使网站随后 301 跳转到 https,第一个请求本身是明文发出的(首请求劫持)。你在未登录状态下发 http 请求通常不含密码,但登录页若本身是 http 就全裸了。
真正的危险不是"默认 http",而是:某些老站点/内网站点根本没有 https,或 https 之后不跳转,用户直接在 http 页面输入凭据。
3. HSTS(HTTP Strict Transport Security,HTTP 严格传输安全)
解决"用户手输 http / 首次请求明文"问题的机制。
工作原理
网站首次通过 https 访问时,响应头带上:
Strict-Transport-Security: max-age=31536000; includeSubDomains- 浏览器记住该域名策略(
max-age秒内有效)。 - 之后即使你输入
http://example.com,浏览器自动升级为 https,不再发明文请求。
HSTS Preload(预置名单)
HSTS 只在第一次 https 访问后才生效,首次仍可能明文。HSTS preload 解决这个冷启动问题:hstspreload.org 维护一个硬编码进浏览器的域名名单(Google/GitHub/支付宝等大站都在)。名单内的域名从第一次起就强制 https。
局限
- 只在 HTTPS 站点声明 HSTS 才有效(老站永远保护不到)。
- 用户清空浏览器数据会丢掉本地 HSTS 记录(但 preload 名单不丢)。
- 内网 IP / 非标准端口很多浏览器不支持 HSTS。
4. HTTPS-First 模式(浏览器侧兜底)
浏览器默认先尝试 https,失败才回退 http(Chrome 默认开启)。与 HSTS 互补:HSTS 靠网站声明,HTTPS-First 靠浏览器主动。
5. 用户侧检查与操作
- 敏感操作(登录/支付)先确认地址栏有锁 → 是 https 才输密码。
- 书签保存完整
https://链接,不靠手输。 - 公共 WiFi 不连,或不在上面做登录/支付。
- 遇到"只有 http 没有 https"的站点:不输入凭据,或要求升级。
- 想强制自己的站点用 https:配 HSTS 头 + 提交 hstspreload.org,并保持 301 跳转。
关联: Htpasswd 基础鉴权 中"必须配合 HTTPS"的警告即源于本笔记第 1 节——Basic Auth 的 base64 凭据在裸 HTTP 下等于明文泄露。
本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/Network