插件窝 干货文章 Nginx SSL配置教程,保障网站安全通信

Nginx SSL配置教程,保障网站安全通信

SSL 配置 certificate 证书 968    来源:    2025-04-16

Nginx SSL配置教程:保障网站安全通信

一、SSL/TLS简介

SSL (Secure Sockets Layer) 及其继任者 TLS (Transport Layer Security) 是用于在互联网上建立加密链接的标准安全技术。通过配置SSL证书,您可以:

  1. 加密客户端与服务器之间的通信
  2. 验证网站的真实性
  3. 提升用户信任度(浏览器显示安全锁标志)
  4. 满足PCI DSS合规要求
  5. 提升SEO排名(Google将HTTPS作为排名因素)

二、准备工作

在开始配置前,您需要:

  1. 获取SSL证书

    • 从CA机构购买(如DigiCert、GlobalSign等)
    • 使用Let's Encrypt免费证书
    • 自签名证书(仅用于测试环境)
  2. 准备证书文件

    • 证书文件(通常为.crt或.pem)
    • 私钥文件(通常为.key)
    • 中间证书链(CA Bundle)

三、Nginx SSL基础配置

1. 基本SSL配置示例

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    # 其他配置...
}

2. 完整的安全配置示例

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    # 启用SSL会话缓存
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    # 指定协议和密码套件
    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;

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

    # HSTS (HTTP Strict Transport Security)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    # 其他安全头
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # 网站根目录和其他配置
    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

四、Let's Encrypt免费证书配置

1. 安装Certbot

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx

# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

2. 获取证书

sudo certbot --nginx -d example.com -d www.example.com

3. 自动续期测试

sudo certbot renew --dry-run

五、HTTP重定向到HTTPS

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

六、SSL配置最佳实践

  1. 使用TLS 1.2/1.3:禁用不安全的TLS 1.0和1.1
  2. 选择强密码套件:优先使用前向保密(Forward Secrecy)的密码
  3. 启用OCSP Stapling:减少SSL握手时间
  4. 配置HSTS:强制浏览器使用HTTPS
  5. 定期更新证书:设置自动续期
  6. 使用HTTP/2:提升性能
  7. 禁用弱加密算法:如RC4, DES, 3DES等

七、常见问题排查

  1. 证书错误

    • 检查证书路径和权限
    • 确保证书链完整
    • 使用openssl x509 -in certificate.crt -text -noout检查证书
  2. 混合内容警告

    • 确保所有资源(CSS, JS, 图片)都通过HTTPS加载
    • 使用内容安全策略(CSP)头
  3. 测试工具

    • SSL Labs测试:https://www.ssllabs.com/ssltest/
    • 使用nginx -t测试配置语法

八、高级配置

1. 多域名SNI配置

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;
    # ...
}

server {
    listen 443 ssl;
    server_name another.com;
    ssl_certificate /path/to/another.com.crt;
    ssl_certificate_key /path/to/another.com.key;
    # ...
}

2. 双向SSL认证

server {
    listen 443 ssl;
    server_name secure.example.com;

    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;

    # 客户端证书验证
    ssl_client_certificate /path/to/ca.crt;
    ssl_verify_client on;

    # 其他配置...
}

通过以上配置,您可以为Nginx服务器建立安全的HTTPS连接,保护用户数据在传输过程中的安全。记得定期检查SSL配置,保持与最新的安全标准一致。