结论与总体建议
只要按现代 TLS 最佳实践进行配置,Nginx 在 Ubuntu 上的 SSL/TLS 可以达到很高的安全水平。关键做法是:仅启用 TLS 1.2/1.3、使用支持**前向保密(PFS)**的 ECDHE 套件、禁用不安全协议与算法(如 SSLv2/SSLv3/TLS1.0/TLS1.1、RC4、DES、EXPORT)、开启 HSTS、OCSP Stapling,并正确部署由受信任 CA 签发的证书(如 Let’s Encrypt)。配合定期更新与合规的网络策略,整体安全性是可保障的。
关键安全配置清单
- 协议与套件
- 仅开启:ssl_protocols TLSv1.2 TLSv1.3;
- 优先 ECDHE + GCM/ChaCha20:示例套件字符串(按服务器与客户端支持微调)
- 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
- 禁用:SSLv2/SSLv3/TLS1.0/TLS1.1、RC4、DES、MD5、EXPORT、匿名套件(如 aNULL/eNULL)
- 密钥交换与曲线
- 启用 PFS:优先 ECDHE;设置安全曲线(如 secp384r1)
- 生成强 DH 参数(可选但推荐):openssl dhparam -out /etc/nginx/dhparam.pem 4096
- 会话与性能
- 会话缓存:ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
- 视兼容性关闭会话票据:ssl_session_tickets off;
- 证书与链
- 使用 fullchain.pem(站点证书 + 中间证书链)与 privkey.pem
- 权限最小化:私钥 chmod 400,证书链 chmod 444
- 安全头部与特性
- HSTS:add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload” always;(确认无误后再启用 preload)
- OCSP Stapling:ssl_stapling on; ssl_stapling_verify on; 配置可用解析器
- 其他:X-Frame-Options DENY; X-Content-Type-Options nosniff;
- HTTP/2
- 在支持的前提下启用:listen 443 ssl http2;(提升性能不影响安全性)
部署与运维要点
- 证书获取与自动续期
- 使用 Certbot:sudo apt install certbot python3-certbot-nginx && sudo certbot --nginx -d example.com -d www.example.com
- 自动续期:0 0 * * 1 /usr/bin/certbot renew --quiet && systemctl reload nginx
- 网络与端口
- 开放 443/TCP(云安全组与系统防火墙如 ufw/firewalld/iptables/nftables 均需放行)
- Nginx 模块与语法
- 确认已编译 –with-http_ssl_module:nginx -V 2>&1 | grep -o – ‘–with-http_ssl_module’
- 配置校验:nginx -t;热重载:systemctl reload nginx 或 nginx -s reload
- 文件与权限
- 证书与私钥放在受限目录(如 /etc/ssl/cert/ 或 /etc/letsencrypt/),权限如上
验证与自测
- 配置语法与连通性
- 语法:nginx -t
- 端口:ss -tlnp | grep ‘:443’ 或 nc -zv 443
- 在线评测与连通性
- SSL Labs Server Test(ssllabs.com/ssltest):目标评级 A+
- 手工探测:curl -Iv https://example.com 或使用 OpenSSL s_client 查看握手与证书链
- 常见问题排查
- 证书链不完整导致浏览器告警 → 使用 fullchain.pem
- 旧客户端兼容问题 → 逐步淘汰 TLS1.2 以下与不安全套件(保持业务可用与安全的平衡)
常见误区与加固建议
- 仍启用 SSLv3/TLS1.0/1.1 或包含 RC4/DES/EXPORT 的套件 → 存在 POODLE、降级与弱加密风险
- 使用自签名证书对外服务 → 浏览器不信任,适合内网测试但不适合公网
- 未开启 HSTS 或误启用 preload → 可能导致长期无法回退 HTTP,启用前务必评估
- 忽视 OCSP Stapling、会话票据与缓存配置 → 影响性能与握手时延,且不利于安全态势
- 证书与私钥权限过宽、路径暴露 → 增加泄露风险,需严格权限与隔离