HTTPS如何配置防劫持

wen 开源项目 28

本文目录导读:

HTTPS如何配置防劫持

  1. 核心基础:启用受信任的证书(最基础但非充分)
  2. 关键防御:启用 HSTS(HTTP Strict Transport Security)
  3. 防御证书伪造:证书透明度(Certificate Transparency, CT)
  4. 防止数据泄露:加密传输与安全配置
  5. 应用层防护:内容安全策略(CSP)
  6. 高级防护:OCSP Stapling(在线证书状态查询)
  7. 监控与验证
  8. 特殊场景:防止 DNS 劫持
  9. 设备与网络层面
  10. 防劫持配置检查清单

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) 禁用不安全的密码套件

  • 绝对禁止RC4MD53DESCBC 模式下的 TLS 1.0。
  • 推荐密码套件(仅举例):
    • TLS_AES_128_GCM_SHA256(TLS 1.3默认)
    • ECDHE-RSA-AES256-GCM-SHA384
    • 避免使用 RSA 密钥交换(仅使用 ECDHEDHE)。

(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)。

防劫持配置检查清单

  1. 启用 HSTS 并设置 max-age 超过 1 年。
  2. 只允许 TLS 1.2/1.3,禁用旧协议和弱密码。
  3. 启用 OCSP Stapling 并验证。
  4. 配置 CSP 限制资源加载源。
  5. 加入 CT 日志监控
  6. 定期 SSL Labs 测试得 A+

为什么这样做能防劫持?

  • HSTS 强制 HTTPS → 防降级。
  • 禁用旧协议/弱密码 → 防破解加密。
  • CT + OCSP → 防伪造/过期证书。
  • CSP → 防内容篡改。

如果你的网站已经正确配置了以上 6 项,即使攻击者能通过中间人拦截流量(如在公共 WiFi 上),现代浏览器也会直接拒绝连接,无法完成劫持。

抱歉,评论功能暂时关闭!