Nginx 中 HTTPS 配置如何开启强密码套件防御中间人攻击

作者:袖梨 2026-08-24

防御中间人攻击需禁用TLS 1.0/1.1及弱算法,强制ssl_protocols TLSv1.2 TLSv1.3,配置ECDHE+AES-GCM强密钥套件,启用HSTS与OCSP Stapling,并隐藏版本信息。

只启用 HTTPS 不等于安全,防御中间人攻击的关键在于让连接无法被降级、无法被解密、无法被伪造。Nginx 的 SSL 密码套件配置是其中最直接有效的防线之一。

禁用不安全协议和弱算法

SSLv2/v3、TLS 1.0 和 TLS 1.1 已被证实存在严重漏洞(如 POODLE、BEAST),必须彻底关闭。RC4、DES、3DES、MD5、SHA1 等加密或哈希算法也已不再可信。

  1. httpserver 块中明确指定:
  2. ssl_protocols TLSv1.2 TLSv1.3;
  3. 不要写 TLSv1.1 或更低版本,哪怕只为兼容旧设备——妥协会直接打开中间人攻击入口

配置高强度且优先级清晰的密码套件

密码套件不是“越多越好”,而是要精简、可控、可验证。优先选择支持前向保密(PFS)、认证加密(AEAD)的组合,例如基于 ECDHE 密钥交换 + AES-GCM 或 ChaCha20-Poly1305 的套件。

  1. 推荐配置(兼顾安全性与主流客户端兼容性):
  2. ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256';
  3. 避免使用 HIGH!aNULL 这类模糊指令,它们可能隐含不安全选项
  4. 禁用客户端强制协商弱算法:ssl_prefer_server_ciphers off;(TLS 1.3 下自动生效,保留该行不影响安全且兼容旧 TLS 1.2 客户端)

启用 HSTS 强制浏览器走 HTTPS

即使你做了 301 跳转,首次 HTTP 请求仍可能被劫持。HSTS 让浏览器记住“只许走 HTTPS”,从源头阻断降级路径。

  1. 在 443 server 块中添加:
  2. add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
  3. max-age=31536000 表示一年内强制 HTTPS
  4. includeSubDomains 扩展保护到所有子域名
  5. preload 是可选但强烈建议——提交至浏览器预加载列表后,新用户首次访问即受保护

开启 OCSP Stapling 提升证书可信度

客户端需验证证书是否被吊销,传统 OCSP 查询会暴露用户行为并增加延迟。OCSP Stapling 由服务器主动获取并缓存状态,随握手一并发送,既提速又防窥探。

  1. 配置如下(需确保证书链完整):
  2. ssl_stapling on;
  3. ssl_stapling_verify on;
  4. ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt;
  5. resolver 8.8.8.8 8.8.4.4 valid=300s;

这些配置共同作用:协议层切断降级可能,密码层保障传输不可逆,HSTS 锁定访问路径,OCSP 确保身份真实。不是堆砌参数,而是层层设防。

相关文章

精彩推荐