CentOS 上 Nginx SSL/TLS 安全配置指南
一 准备与环境检查
- 安装组件:建议安装 Nginx 与 OpenSSL,并启用 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 自动配置与续期);测试环境可用自签名证书。
二 获取与部署证书
三 推荐的 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):
- 测试续期:sudo certbot renew --dry-run
- 加入定时任务(例如每日检查):echo ‘0 0,12 * * * root /usr/bin/certbot renew --quiet’ | sudo tee -a /etc/crontab
五 常见加固与排错要点
- 禁用不安全协议与弱套件:仅保留 TLSv1.2/1.3;移除 SSLv2/3、TLS1.0/1.1 与 RC4、DES、MD5 等弱算法。
- 证书与私钥安全:私钥 600、证书 644、属主 root:root;禁止将私钥放在 Web 可访问目录。
- 信息泄露防护:在 http 块设置 server_tokens off; 隐藏版本号;统一错误页面并限制直接访问。
- 合规与功能取舍:如业务需兼容旧客户端,谨慎评估是否启用 TLS1.0/1.1 或特定套件;启用 HSTS 前确保全站可达且证书无误,避免锁死访问。
- 调试思路:证书链不完整会触发浏览器告警或评测降级;优先使用 fullchain.pem;OCSP 解析失败可更换 resolver 或暂时关闭 Stapling 排查。