温馨提示×

centos nginx ssl安全策略建议

小樊
43
2026-01-07 23:46:46
栏目: 云计算

CentOS 上 Nginx SSL/TLS 安全策略建议

一 基线策略与禁用项

  • 仅启用现代协议:使用 TLSv1.2/TLSv1.3;禁用 SSLv2/SSLv3/TLSv1.0/TLSv1.1(防范 POODLE、降级攻击等)。
  • 仅保留强套件:优先 ECDHE 密钥交换 + AEAD(如 AES‑GCMCHACHA20‑POLY1305);禁用 RC4DES/3DESMD5EXPORTaNULL/eNULL 等已知弱算法与空套件。
  • 启用 HTTP/2 提升性能与安全(与 TLS 同时启用)。
  • 禁用 SSL 压缩(降低 CRIME 风险;现代 Nginx/OpenSSL 默认已关闭,无需额外配置)。
  • 证书链要完整(部署 fullchain.pem),私钥权限 600,属主 root:root

二 推荐 Nginx 配置片段

# /etc/nginx/conf.d/ssl.conf 示例(仅展示关键项)
server {
    listen 443 ssl http2;
    server_name example.com;

    # 证书与链(Let's Encrypt 常用路径)
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 协议与套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;   # TLS1.3 忽略套件顺序;TLS1.2 下可设为 on
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
                ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
                ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';

    # 椭圆曲线(优先 X25519)
    ssl_ecdh_curve X25519:secp384r1;

    # 前向保密:DHE 参数(4096 位)
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # 会话复用
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;   # 多节点/安全性要求高时建议关闭

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    resolver 223.5.5.5 8.8.8.8 valid=300s;
    resolver_timeout 5s;

    # 安全响应头
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;

    # 可选:TLS 1.3 0-RTT(仅幂等场景启用)
    # ssl_early_data on;
}

# HTTP → HTTPS 强制跳转
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
  • 生成 DHE 参数(首次部署执行一次):
    openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
  • 权限建议:chmod 600 /etc/letsencrypt/live/example.com/privkey.pem

三 证书与密钥管理

  • 使用 Let’s Encrypt 获取免费证书并自动配置 Nginx:
    sudo yum install epel-release && sudo yum install certbot python3-certbot-nginx
    sudo certbot --nginx -d example.com -d www.example.com
  • 自动续期(默认每 60 天检查;测试续期):
    sudo certbot renew --dry-run
    生产建议加定时任务(如每日 03:00 检查):
    0 3 * * * /usr/bin/certbot renew --quiet --post-hook “systemctl reload nginx”
  • 证书链完整性:部署 fullchain.pem(站点证书 + 中间证书),避免部分终端校验证书链失败。

四 验证与上线流程

  • 配置语法检查与平滑重载:
    sudo nginx -t && sudo systemctl reload nginx
  • 功能与性能验证:
    • 查看 HTTP/2:curl -I --http2 https://example.com
    • 协议/套件探测:nmap --script ssl-enum-ciphers -p 443 example.com
    • 在线评测:Qualys SSL Labs Server Test(目标 A/A+
  • 观测指标:握手时延、会话复用率、OCSP 命中率、4xx/5xx 异常波动。

五 进阶与注意事项

  • 0‑RTT(TLS 1.3):仅在幂等接口启用(如静态资源、GET),避免重放攻击风险。
  • HTTP/3(QUIC):需 Nginx 编译支持 quic 模块;示例:
    listen 443 quic reuseport;
    add_header Alt-Svc ‘h3=“:443”; ma=86400’ always;
    同时放行 UDP/443 并评估负载均衡/网关兼容性。
  • HSTS 预加载:仅在全站 HTTPS 稳定后开启,避免证书问题导致全站不可达。
  • 兼容性取舍:若必须兼容极旧客户端,可在 TLSv1.2 下补充部分 DHE 套件,但总体仍应优先 ECDHE + AEAD

0