Debian 上 Nginx SSL 安全策略清单
一 基础与证书管理
- 保持软件为最新:在 Debian 上及时更新 Nginx/OpenSSL,及时获得安全修复与协议改进。
- 使用有效证书:优先使用 Let’s Encrypt 等可信 CA;通过 Certbot 获取并自动配置证书,便于后续自动续期。
- 强制 HTTPS:将 HTTP→HTTPS 301 重定向,全站走加密通道。
- 自动续期与热重载:配置 certbot renew --dry-run 定期演练,续期成功后 systemctl reload nginx 生效。
- 防火墙仅放行必要端口:仅开放 80/443/tcp(如 ufw allow 80,443/tcp)。
二 协议与加密套件
- 禁用不安全协议:关闭 SSLv2/SSLv3 与 TLS 1.0/1.1,仅启用 TLSv1.2/TLSv1.3。
- 优先 ECDHE 实现前向保密(FS):选择以 ECDHE 为密钥交换的套件,禁用 RC4、DES、MD5、EXPORT 等弱算法与散列。
- 服务器优先套件与合规套件串:开启 ssl_prefer_server_ciphers on;,使用现代、经过审计的套件顺序。
- 示例(TLS 1.2/1.3,FS 优先):
- TLS 1.3:
- ssl_protocols TLSv1.3;
- ssl_ciphersuites TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256;
- TLS 1.2(配合 1.3 使用):
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
- 说明:TLS 1.3 已内置 PFS 与更安全的套件,无需再显式指定 ECDHE;TLS 1.2 需通过套件选择保证 FS。
三 握手与会话优化
- 会话复用与缓存:开启 ssl_session_cache shared:MozSSL:10m; 与 ssl_session_timeout 1d;,降低握手开销并提升性能。
- 安全的 DH 参数:使用 2048+ 位的 DH 参数(如 /etc/letsencrypt/ssl-dhparams.pem),避免低强度参数导致的风险。
- OCSP Stapling:启用 ssl_stapling on; ssl_stapling_verify on;,并配置 resolver 与 ssl_trusted_certificate,减少客户端验证延迟并避免泄露客户端查询。
四 安全响应头与浏览器策略
- HSTS:添加 Strict-Transport-Security “max-age=31536000; includeSubDomains; preload” always;,强制浏览器后续使用 HTTPS。
- 常见防护头:
- X-Frame-Options: SAMEORIGIN(防点击劫持)
- X-Content-Type-Options: nosniff(防 MIME 嗅探)
- X-XSS-Protection: 1; mode=block(防反射型 XSS)
- 可选 CSP:如 Content-Security-Policy “default-src ‘self’; …”,进一步限制资源加载来源(按站点策略细化)。
五 部署验证与运维加固
- 配置语法与连通性:变更前执行 nginx -t;重载 systemctl reload nginx;对外仅暴露 80/443。
- 证书续期演练:定期执行 certbot renew --dry-run,确保自动续期稳定。
- 漏洞与降级防护:禁用 SSLv3/TLS1.0/1.1、RC4、EXPORT 等已知弱项;如运行旧版 OpenSSL,关注并修复 CVE-2016-2183(SWEET32) 等风险;启用 TLS_FALLBACK_SCSV 缓解降级攻击。
- 监控与审计:持续监控 Nginx 访问/错误日志,必要时结合 Prometheus/Grafana、ELK 做安全分析与告警。