TLS 配置的六个决定:协议版本、套件、证书与 HSTS
很多站点开了 HTTPS,却仍在支持 TLS 1.0 与 RC4 套件,等于给降级攻击留门。
配置的目标是「只保留现代客户端能用的最强组合」。
先说结论
只开 TLS 1.2/1.3,用 AEAD 套件,证书链完整并自动续期。
- 禁用 TLS 1.0/1.1 与弱套件
- 开启 OCSP Stapling 减少握手延迟
- HSTS 在确认全站 HTTPS 后开启
- 证书到期监控,别等过期
漏洞是怎么产生的
TLS 的握手协商会让双方选择「都支持的最强组合」,所以服务端必须主动裁掉弱项。
证书链不完整是最常见的「浏览器报错但 curl 正常」的原因。
修复与验证
修复不是改一行代码,而是四件事一起做:
- ssl_protocols 只留 TLSv1.2 TLSv1.3
- 套件限制为 AEAD(ECDHE + AES-GCM/ChaCha20)
- 配置完整证书链(含中间证书)
- 开启 OCSP Stapling 与 session 复用
- 加 HSTS 与到期提醒
攻击面与检测点
按影响面排序,先修影响最大的:
| 项 | 推荐 | 说明 |
|---|---|---|
| 协议 | TLS1.2 + TLS1.3 | 禁 1.0/1.1 |
| 套件 | ECDHE-AEAD | 前向安全 |
| 证书 | 完整链 + 自动续期 | acme.sh/certbot |
| HSTS | max-age 1 年 | 先确认全站 HTTPS |

几个容易踩的坑
下面这些是最常见的错误做法:
- 只配域名证书不配中间证书:部分客户端失败
- HSTS 开太早:HTTP 站点直接不可访问
- 证书自动续期没配 reload:续了但没生效
- 为了兼容老客户端保留 TLS1.0
写在最后
TLS 配置的验收标准:用在线检测工具跑一遍,只留 A/A+ 的结果。
安全不是一次加固,是持续的假设:假设输入不可信、假设边界会破、假设有人会看错。
评论 (3)
修复清单比漏洞描述有用多了,很多文章只讲怎么打不讲怎么防。
白名单那条永远是最有效的,正则黑名单迟早绕过。
建议再补一条:把这类检查加到 CI 里,靠人记必然漏。
发表评论