防御中间人攻击需禁用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 等加密或哈希算法也已不再可信。
ssl_protocols TLSv1.2 TLSv1.3;TLSv1.1 或更低版本,哪怕只为兼容旧设备——妥协会直接打开中间人攻击入口密码套件不是“越多越好”,而是要精简、可控、可验证。优先选择支持前向保密(PFS)、认证加密(AEAD)的组合,例如基于 ECDHE 密钥交换 + AES-GCM 或 ChaCha20-Poly1305 的套件。
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';HIGH、!aNULL 这类模糊指令,它们可能隐含不安全选项ssl_prefer_server_ciphers off;(TLS 1.3 下自动生效,保留该行不影响安全且兼容旧 TLS 1.2 客户端)即使你做了 301 跳转,首次 HTTP 请求仍可能被劫持。HSTS 让浏览器记住“只许走 HTTPS”,从源头阻断降级路径。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;max-age=31536000 表示一年内强制 HTTPSincludeSubDomains 扩展保护到所有子域名preload 是可选但强烈建议——提交至浏览器预加载列表后,新用户首次访问即受保护客户端需验证证书是否被吊销,传统 OCSP 查询会暴露用户行为并增加延迟。OCSP Stapling 由服务器主动获取并缓存状态,随握手一并发送,既提速又防窥探。
ssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt;resolver 8.8.8.8 8.8.4.4 valid=300s;这些配置共同作用:协议层切断降级可能,密码层保障传输不可逆,HSTS 锁定访问路径,OCSP 确保身份真实。不是堆砌参数,而是层层设防。