温馨提示×

centos nginx ssl安全设置指南

小樊
47
2025-11-15 21:48:56
栏目: 云计算

CentOS 上 Nginx SSL/TLS 安全配置指南

一 准备与环境检查

  • 安装组件:建议安装 NginxOpenSSL,并启用 EPEL 源(如系统未自带)。
    命令示例:sudo yum install -y epel-release nginx openssl
  • 确认模块:确保 Nginx 编译时包含 http_ssl_module(现代发行包通常默认包含)。
    命令示例:nginx -V 2>&1 | grep – ‘–with-http_ssl_module’
  • 防火墙放行:放行 HTTPS 443 端口(如使用 firewalld)。
    命令示例:sudo firewall-cmd --permanent --add-service=https && sudo firewall-cmd --reload
  • 证书准备:生产环境优先使用 Let’s Encrypt 免费证书(Certbot 自动配置与续期);测试环境可用自签名证书。

二 获取与部署证书

  • 使用 Certbot 自动获取并配置(推荐):

    1. 安装 Certbot:sudo yum install -y certbot python2-certbot-nginx
    2. 获取并自动修改 Nginx 配置:sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    3. 证书默认路径:/etc/letsencrypt/live/yourdomain.com/,常用文件为 fullchain.pemprivkey.pem;Certbot 会自动设置 HTTP→HTTPS 跳转与自动续期。
  • 手动部署(已有或自签名证书):

    1. 放置证书:建议目录 /etc/nginx/ssl/,权限私钥 600、证书 644,属主 root:root
    2. 基本站点配置示例:
      server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; }
      server { listen 443 ssl http2; server_name yourdomain.com;
      ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
      ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
      root /var/www/html; index index.html; }
    3. 检查与生效:sudo nginx -t && sudo systemctl reload nginx
  • 自签名证书(仅测试):
    命令示例:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/pki/tls/private/nginx-selfsigned.key \ -out /etc/pki/tls/certs/nginx-selfsigned.crt

三 推荐的 SSL/TLS 安全配置

  • 协议与套件(优先 TLSv1.2/1.3,启用 ECDHE 前向保密与 AES-GCM/ChaCha20):
    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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384’;
    ssl_prefer_server_ciphers on;
  • 会话复用与性能:
    ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
    listen 443 ssl http2;
  • 密钥交换与证书链:
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;(生成:openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048)
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
  • OCSP Stapling(提升握手与隐私):
    ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s;
  • 安全响应头与 HSTS:
    add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection “1; mode=block”;
    add_header Content-Security-Policy “default-src ‘self’;”;

四 验证与运维

  • 配置语法与生效:sudo nginx -t && sudo systemctl reload nginx
  • 连通性与证书查看:
    openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
    openssl x509 -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -text -noout
  • 在线评测:使用 SSL Labs SSL Test(ssllabs.com/ssltest/)进行评级与问题定位。
  • 自动续期(Certbot):
    1. 测试续期:sudo certbot renew --dry-run
    2. 加入定时任务(例如每日检查):echo ‘0 0,12 * * * root /usr/bin/certbot renew --quiet’ | sudo tee -a /etc/crontab

五 常见加固与排错要点

  • 禁用不安全协议与弱套件:仅保留 TLSv1.2/1.3;移除 SSLv2/3、TLS1.0/1.1RC4、DES、MD5 等弱算法。
  • 证书与私钥安全:私钥 600、证书 644、属主 root:root;禁止将私钥放在 Web 可访问目录。
  • 信息泄露防护:在 http 块设置 server_tokens off; 隐藏版本号;统一错误页面并限制直接访问。
  • 合规与功能取舍:如业务需兼容旧客户端,谨慎评估是否启用 TLS1.0/1.1 或特定套件;启用 HSTS 前确保全站可达且证书无误,避免锁死访问。
  • 调试思路:证书链不完整会触发浏览器告警或评测降级;优先使用 fullchain.pem;OCSP 解析失败可更换 resolver 或暂时关闭 Stapling 排查。

0