插件窝 干货文章 在Nginx中配置安全的SSL证书传输

在Nginx中配置安全的SSL证书传输

配置 SSL 证书 certificate 399    来源:    2025-04-20

Nginx安全SSL证书配置指南

基本SSL配置

server {
    listen 443 ssl;
    server_name example.com;

    # 证书路径配置
    ssl_certificate /path/to/fullchain.pem;  # 包含中间证书的完整证书链
    ssl_certificate_key /path/to/private.key; # 私钥文件

    # 启用SSL会话复用
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 仅使用TLS协议,禁用不安全的SSL协议
    ssl_protocols TLSv1.2 TLSv1.3;

    # 配置密码套件
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
    ssl_prefer_server_ciphers on;

    # 启用HSTS (HTTP Strict Transport Security)
    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";

    # OCSP Stapling配置
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # 其他服务器配置...
}

高级安全配置选项

  1. 证书自动更新配置 (适用于Let's Encrypt证书):
# 在http上下文中添加
map $host $certificate_path {
    default "/etc/letsencrypt/live/$host/fullchain.pem";
}

map $host $certificate_key_path {
    default "/etc/letsencrypt/live/$host/privkey.pem";
}

server {
    ssl_certificate $certificate_path;
    ssl_certificate_key $certificate_key_path;
}
  1. DH参数增强:
# 生成强DH参数(建议定期更新)
openssl dhparam -out /etc/nginx/dhparam.pem 4096

然后在Nginx配置中添加:

ssl_dhparam /etc/nginx/dhparam.pem;
  1. TLS 1.3专用配置:
ssl_ciphers 'TLS13+AESGCM+AES128:TLS13+AESGCM+AES256:TLS13+CHACHA20';

最佳实践建议

  1. 证书管理:

    • 使用2048位或更长的RSA密钥,或256位的ECDSA密钥
    • 确保证书链完整(包含中间证书)
    • 设置自动续期机制(如Certbot)
  2. 安全强化:

    • 定期更新DH参数(每6个月)
    • 禁用TLS压缩(防止CRIME攻击)
    • 考虑启用0-RTT时要谨慎(可能重放攻击)
  3. 性能优化:

    • 启用OCSP Stapling减少客户端验证时间
    • 调整SSL缓冲区大小: ssl_buffer_size 4k;
    • 考虑使用TLS 1.3的0-RTT功能(需评估安全风险)
  4. 监控与维护:

    • 使用SSL Labs测试工具定期检查配置
    • 监控证书过期时间
    • 关注安全公告并及时更新Nginx版本

验证配置

配置完成后,使用以下工具验证:

nginx -t  # 测试配置语法
service nginx reload  # 重新加载配置

# 使用SSL Labs测试
curl https://www.ssllabs.com/ssltest/analyze.html?d=yourdomain.com

通过以上配置,您可以建立一个安全、高效的SSL/TLS加密传输层,保护用户数据在传输过程中的安全。