推荐使用Let's Encrypt免费证书:
# 使用certbot获取证书
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
商业证书注意事项:
server {
listen 443 ssl;
server_name example.com;
# 证书路径配置
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 启用OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
}
ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的TLS 1.0和1.1
# 现代安全配置 (兼容性较好)
ssl_ciphers 'TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
# 更严格的配置 (最高安全性)
ssl_ciphers 'TLS13+AESGCM+AES128:TLS13+AESGCM+AES256:TLS13+CHACHA20:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m; # 10MB共享缓存
ssl_session_timeout 1d; # 会话超时1天
ssl_session_tickets off; # 禁用会话票证(除非需要集群)
ssl_early_data on; # 启用0-RTT(注意安全风险)
# 生成强DH参数(建议2048位)
openssl dhparam -out /etc/nginx/dhparam.pem 2048
ssl_dhparam /etc/nginx/dhparam.pem;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# 设置cron自动续期
0 12 * * * /usr/bin/certbot renew --quiet
证书验证失败:
openssl s_client -connect example.com:443 -servername example.com
检查证书链协议不匹配:
性能问题:
ssl_buffer_size 4k;
优化小文件传输ssl_session_tickets
(如果不需要集群会话保持)OCSP Stapling验证:
openssl s_client -connect example.com:443 -status -servername example.com < /dev/null 2>&1 | grep -i "OCSP response"
通过以上配置,您可以建立一个既安全又高效的Nginx TLS反向代理环境。根据您的具体需求和安全要求,可以适当调整这些参数。