04 · 传输安全与 TLS 实践
协议原理见 N05,本篇讲怎么把 TLS 配对、用对:证书生命周期、HSTS、mTLS、常见配置错误。先给结论:传输安全不是"加个绿锁"就完事,是证书、版本、策略与监控的组合。
速览卡
| 项 | 内容 |
|---|---|
| 一句话定位 | 把 TLS 从"能跑"配到"安全"的落地清单与排障 |
| 核心内容 | 证书生命周期、HSTS、协议与套件策略、mTLS、常见错误 |
| 读完能回答 | HTTPS 为什么还不够?证书怎么续、吊销怎么办? |
| 相关板块 | N05 TLS | S03 密码学 | C16 服务端安全纵深 |
一、先给结论:传输安全不止"装个证书"
text
传输安全 = 证书正确 + 协议够新 + 降级被禁 + 密钥安全 + 有监控一句话:浏览器不报错只是底线。生产要回答四个问题:证书会过期吗、支持 TLS 1.2 以下吗、HTTP 会被重定向到 HTTPS 吗、私钥丢过吗。
二、证书生命周期:从申请到吊销
| 阶段 | 要点 |
|---|---|
| 申请 | 用受信 CA,域名校验,别用自签证书上生产 |
| 部署 | 证书+私钥正确匹配,私钥不进镜像/仓库 |
| 续期 | 自动续期(如 Let's Encrypt),提前告警 |
| 吊销 | 私钥泄露立即吊销并轮换,同步到 CRL/OCSP |
| 清理 | 到期证书及时移除,别留"忘了"的旧证书 |
最容易出事的是续期:证书过期不报错于配置,只表现为用户看到"不安全"。续期自动化的核心是提前 30 天告警而不是等过期。
三、协议版本与套件策略
| 项 | 建议 |
|---|---|
| 协议 | 只开 TLS 1.2+,禁用 SSLv3/TLS1.0/1.1 |
| 套件 | 只留 ECDHE + GCM 一档,禁用弱套件 |
| 密钥 | 优先 ECDSA,兼容场景用 RSA ≥ 2048 |
| 检查 | 用 ssllabs.com 或 nmap 定期扫 |
类比前端:就像浏览器兼容矩阵——旧版本可以"知道但不支持",但绝不能"默默降级"。
四、HSTS:把"安全"固定下来
http
Strict-Transport-Security: max-age=31536000; includeSubDomains| 作用 | 说明 |
|---|---|
| 强制 HTTPS | 浏览器记住:该域名只走 HTTPS |
| 防降级 | 阻止中间人把 HTTPS 降成 HTTP |
| 注意 | 部署前确认 HTTPS 100% 可用,否则 max-age 别一次给一年 |
HSTS 是把双刃剑:一旦下发,客户端会强制 HTTPS 很长时间。先小 max-age 灰度,确认无误再加大。
五、mTLS:服务间通信怎么认证
mTLS(双向 TLS):不只客户端验证服务端,服务端也要求客户端出示证书。
| 场景 | 是否用 mTLS |
|---|---|
| 用户浏览器访问 | 不用,用户用账号体系 |
| 内部服务间调用 | 常用,替代"裸内网信任" |
| 与第三方平台对接 | 看对方要求,常配合 API 网关 |
一句话:mTLS 解决的是"机器之间互相证明身份",不是用户登录。别把两者混用。
六、常见配置错误与排查
| 现象 | 原因 | 处理 |
|---|---|---|
| 证书链不完整 | 漏中间证书 | 按 CA 要求拼全链 |
| 证书/私钥不匹配 | 部署错对 | 校验指纹后重配 |
| HTTPS 跳 HTTP | 反向代理配置 | 服务端 301 + HSTS |
| 内网服务裸 HTTP | 默认没 TLS | 内网也该 TLS(防局域网嗅探) |
| 证书过了期才发现 | 无监控 | 加提前告警 |
排查起点:先分清"证书问题"还是"配置问题"。证书问题看有效期/域名/信任链,配置问题看协议版本/重定向/套件。
七、自检清单
- [ ] 生产只开 TLS 1.2+,禁掉所有旧协议
- [ ] 证书自动续期 + 提前 30 天告警
- [ ] 私钥不进 git、不进镜像、只有运行态可读
- [ ] HSTS 已灰度上线,确认无 HTTP 残留
- [ ] 服务间通信明确:信任边界内用什么认证(mTLS / 内网 / token)
- [ ] 有定期扫描(协议/套件/证书过期)
八、常见误区
| 误区 | 事实 |
|---|---|
| "HTTPS 就安全了" | 只保护传输;证书过期、降级、弱套件都可能是洞 |
| "证书不过期就行" | 还有域名匹配、信任链、吊销状态要查 |
| "内网不用 TLS" | 局域网同样可被嗅探/中间人 |
| "mTLS 能当登录" | 它只证明机器身份,不证明用户是谁 |
| "HSTS 一下开到最大" | 未灰度时可能把自己锁在 HTTPS 之外 |
九、动手练习
练习 A:扫一次自己的站点
用 ssllabs.com 或 nmap --script ssl-enum-ciphers 扫一个你负责的服务,列出三项需要改的点。
练习 B:配证书自动续期
用 Let's Encrypt + 反向代理给一个测试域名配自动续期,验证到期前 30 天告警链路。
练习 C:HSTS 灰度
先下发 max-age=3600 观察一天,再提升到长期值;记录 HTTP 残留请求,验证 301 到位。
相关文档
本区
- 03 · 密码学基础 —— TLS 用到的非对称+对称原语
- S · 安全计划
其他域
- N05 · TLS 与证书 —— 握手与信任链的协议细节
- C16 · 服务端安全纵深 —— 服务端整体安全与密钥管理
- 04 · 浏览器与网络 —— 浏览器侧证书与混合内容行为