Ubuntu Nginx SSL优化技巧
优先使用TLS 1.2(广泛支持且安全)和TLS 1.3(最新版本,握手更快、安全性更高),彻底禁用SSLv3、TLSv1.0、TLSv1.1等已知存在漏洞的协议(如POODLE、BEAST攻击)。配置示例如下:
ssl_protocols TLSv1.2 TLSv1.3;
通过SSL Labs等工具验证配置,确保无旧协议漏洞。
选择支持**前向保密(Forward Secrecy)**的加密套件(如ECDHE、DHE),避免使用弱算法(如RC4、DES、MD5、SHA1)。推荐配置:
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';
ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件
禁用弱套件:ssl_ciphers '!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA';。
通过会话缓存和会话票证优化,复用已建立的SSL会话,降低后续连接的握手延迟(TLS 1.3默认支持会话恢复)。配置示例如下:
ssl_session_cache shared:SSL:50m; # 共享内存缓存,大小根据服务器内存调整
ssl_session_timeout 1d; # 会话超时时间(1天)
ssl_session_tickets off; # 禁用TLS 1.2的会话票证(避免密钥泄露风险,TLS 1.3无需此配置)
启用OCSP Stapling,让服务器主动获取证书状态并发送给客户端,避免客户端直接向CA验证(减少延迟并保护隐私)。配置示例如下:
ssl_stapling on; # 启用OCSP Stapling
ssl_stapling_verify on; # 验证OCSP响应的有效性
ssl_trusted_certificate /path/to/trusted_ca_certificates.crt; # CA根证书+中间证书路径
resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS解析器配置
resolver_timeout 5s; # 解析超时时间
通过Strict-Transport-Security头强制浏览器只通过HTTPS访问网站,防止中间人攻击(如SSL剥离)。配置示例如下:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
max-age=63072000:缓存时间(2年);includeSubDomains:覆盖所有子域名;preload:提交到浏览器预加载列表(需谨慎使用)。openssl dhparam -out /etc/nginx/dhparam.pem 4096
配置引用:ssl_dhparam /etc/nginx/dhparam.pem;ssl_buffer_size 4k;
使用Let’s Encrypt免费证书,通过Certbot实现自动续期(避免手动操作导致服务中断):
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 首次申请
sudo certbot renew --quiet --post-hook "systemctl reload nginx" # 自动续期(添加到crontab)
配置cron任务(每天检查):
0 0 */7 * * certbot renew --quiet --post-hook "systemctl reload nginx"
除HSTS外,添加以下安全头提升网站整体安全性:
add_header X-Frame-Options "SAMEORIGIN"; # 防止点击劫持
add_header X-Content-Type-Options "nosniff"; # 禁止MIME类型嗅探
add_header X-XSS-Protection "1; mode=block"; # 防止XSS攻击
add_header Referrer-Policy "strict-origin-when-cross-origin"; # 控制Referer信息
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.example.com; img-src 'self' data: https://*.example.com;" # 内容安全策略
以上技巧兼顾了SSL的安全性与性能,需根据实际环境(如客户端兼容性、服务器资源)调整配置参数。定期使用SSL Labs测试工具验证配置有效性,确保符合最新安全标准。