nginx https安全加固需禁用tls 1.0/1.1及弱算法,强制ssl_protocols tlsv1.2 tlsv1.3,配置强cipher套件、启用hsts与ocsp stapling,并隐藏版本信息。

只启用 HTTPS 远远不够,抵御中间人攻击的关键在于强制高强度加密、阻断降级路径、验证身份真实性,并持续加固传输链路。Nginx 本身不发证,但配置决定连接是否真正可信。
禁用所有不安全协议与弱密码套件
SSLv2/v3 和 TLS 1.0/1.1 已被公开漏洞(如 POODLE、BEAST)攻破,必须彻底关闭;RC4、DES、3DES、MD5、SHA1 等算法也已不再安全。
- 在 http 或 server 块中明确声明:
ssl_protocols TLSv1.2 TLSv1.3; - 指定强加密套件,优先使用 ECDHE 密钥交换 + AES-GCM 认证加密:
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'; - 禁用客户端强制协商弱算法:
ssl_prefer_server_ciphers off;(TLS 1.3 下自动生效,保留兼容性)
启用前向保密与高效密钥交换
前向保密确保即使私钥未来泄露,历史通信也无法解密;ECDHE 比传统 DHE 更快更安全。
- 推荐使用 secp384r1 曲线(比 prime256v1 更强,且兼容主流客户端):
ssl_ecdh_curve secp384r1; - 若需额外增强(尤其对旧客户端兼容场景),可生成 DH 参数并引用:
ssl_dhparam /etc/nginx/ssl/dhparam.pem;(用openssl dhparam -out dhparam.pem 4096生成)
强制 HTTPS 并防止混合内容与协议降级
仅靠重定向无法阻止攻击者在首次访问时劫持 HTTP 请求,必须靠响应头主动约束浏览器行为。
- 启用 HSTS,强制所有子域在一年内只走 HTTPS(含 preload 提交资格):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; - 自动升级不安全资源请求,避免混合内容警告和降级风险:
add_header Content-Security-Policy "upgrade-insecure-requests;" always; - 隐藏服务器版本信息,减少指纹暴露:
server_tokens off;
强化证书验证与状态响应机制
中间人常伪造或干扰证书状态查询过程,OCSP Stapling 可让 Nginx 主动提供权威签名的吊销状态,绕过客户端直连 OCSP 服务器的风险。
- 启用并验证 OCSP Stapling:
ssl_stapling on;<br>ssl_stapling_verify on;
- 配置可靠 DNS 解析器(避免使用本地不可控 DNS):
resolver 8.8.8.8 1.1.1.1 valid=300s;<br>resolver_timeout 5s;
- 确保证书链完整,包含中间 CA(
ssl_trusted_certificate可选但推荐)











