本文目录导读:

- 核心基础:启用受信任的证书(最基础但非充分)
- 关键防御:启用 HSTS(HTTP Strict Transport Security)
- 防御证书伪造:证书透明度(Certificate Transparency, CT)
- 防止数据泄露:加密传输与安全配置
- 应用层防护:内容安全策略(CSP)
- 高级防护:OCSP Stapling(在线证书状态查询)
- 监控与验证
- 特殊场景:防止 DNS 劫持
- 设备与网络层面
- 防劫持配置检查清单
HTTPS 防劫持的核心在于防止中间人攻击,即防止攻击者在客户端与服务器之间伪造证书或篡改通信内容,以下是全面的配置防劫持方案,按优先级从高到低排列:
核心基础:启用受信任的证书(最基础但非充分)
- 必须使用正规CA颁发的证书:自签名证书或不受信任的根证书会导致浏览器警告,更容易被劫持。
- 避免使用过期或吊销的证书:定期检查证书有效期。
- 使用现代签名算法:优先使用 SHA-256 及以上(避免 SHA-1)。
关键防御:启用 HSTS(HTTP Strict Transport Security)
HSTS 强制浏览器只能通过 HTTPS 访问你的网站,彻底杜绝从 HTTP 到 HTTPS 的降级攻击(如 SSL Strip)。
配置方法(Nginx 示例):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
max-age:建议设为31536000(1年)。includeSubDomains:保护所有子域名。preload:申请加入浏览器 HSTS Preload 列表(需提交至 hstspreload.org),实现硬编码级别的防护。
关键点:HSTS 一旦设置,后续访问不会允许任何 HTTP 连接,即使证书被伪造也会被浏览器拦截。
防御证书伪造:证书透明度(Certificate Transparency, CT)
- 启用 CT 日志:确保你的证书被记录在公共的 CT 日志中,浏览器(如 Chrome)会要求新证书必须包含 CT 信息(SCTs)。
- 审核证书签发:通过 CT 日志监控是否有未授权的 CA 为你签发证书(如 LetsEncrypt、DigiCert 等),可使用工具(如
certspotter)实时监控。
防止数据泄露:加密传输与安全配置
(a) 强制使用 TLS 1.2 及以上版本
- 禁用 TLS 1.0/1.1:这些版本有已知漏洞(如 BEAST、POODLE)。
- 禁用 SSL v2/v3:绝对不安全。
Nginx 配置示例:
ssl_protocols TLSv1.2 TLSv1.3; # 仅允许这两个版本 ssl_ciphers HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128; # 使用强密码套件 ssl_prefer_server_ciphers on; # 优先使用服务器端的密码顺序(避免客户端降级)
(b) 禁用不安全的密码套件
- 绝对禁止:
RC4、MD5、3DES、CBC模式下的 TLS 1.0。 - 推荐密码套件(仅举例):
TLS_AES_128_GCM_SHA256(TLS 1.3默认)ECDHE-RSA-AES256-GCM-SHA384- 避免使用
RSA密钥交换(仅使用ECDHE或DHE)。
(c) 启用 HTTP/2(可选但推荐)
- HTTP/2 默认使用 TLS 且强制更高安全性,能减少降级风险。
应用层防护:内容安全策略(CSP)
CSP 防止攻击者篡改或注入恶意脚本(如劫持后插入 iframe)。
配置示例:
Content-Security-Policy: default-src 'self'; script-src 'self'; frame-ancestors 'none'; upgrade-insecure-requests;
upgrade-insecure-requests:自动将页面中的 HTTP 资源升级为 HTTPS(若未完全启用 HSTS)。
高级防护:OCSP Stapling(在线证书状态查询)
作用:证明你的证书未被吊销,防止攻击者利用未及时更新的 CRL(证书吊销列表)进行中间人攻击。
Nginx 配置:
ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s; # 使用可靠 DNS 解析 OCSP 响应 ssl_trusted_certificate /path/to/chain.pem; # 包含所有中间证书的文件
监控与验证
- 每日检查证书到期(使用
certbot renew或监控工具)。 - 配置安全扫描:使用 SSL Labs 测试你的站点配置(目标评分 A+)。
- 监控日志:检查是否有异常证书请求、TLS 握手失败或未认证的连接。
特殊场景:防止 DNS 劫持
- 使用 DNSSEC:防止攻击者将域名解析指向假服务器,虽不直接防 HTTPS 劫持,但可阻断通过 DNS 篡改的中间人攻击。
- CDN 与 WAF:如果使用 CDN,确保 CDN 也支持 HSTS 并正确配置证书。
设备与网络层面
- 使用企业内部证书监控:如果企业内网存在劫持(如 SSL 解密),需在出口防火墙或代理上配置正确的 CA 证书,并禁止非法证书。
- 禁用不安全的客户端:部署移动端应用时,使用 Certificate Pinning(证书固定)或 Public Key Pinning(公钥固定)——注意:此方法风险较高(证书更新困难),仅建议在可控环境中使用(如企业内部App)。
防劫持配置检查清单
- ✅ 启用 HSTS 并设置
max-age超过 1 年。 - ✅ 只允许 TLS 1.2/1.3,禁用旧协议和弱密码。
- ✅ 启用 OCSP Stapling 并验证。
- ✅ 配置 CSP 限制资源加载源。
- ✅ 加入 CT 日志监控。
- ✅ 定期 SSL Labs 测试得 A+。
为什么这样做能防劫持?
- HSTS 强制 HTTPS → 防降级。
- 禁用旧协议/弱密码 → 防破解加密。
- CT + OCSP → 防伪造/过期证书。
- CSP → 防内容篡改。
如果你的网站已经正确配置了以上 6 项,即使攻击者能通过中间人拦截流量(如在公共 WiFi 上),现代浏览器也会直接拒绝连接,无法完成劫持。