插件窝 干货文章 Nginx SSL/TLS配置的实现

Nginx SSL/TLS配置的实现

SSL 配置 ECDHE example 266    来源:    2025-04-01

Nginx SSL/TLS 配置实现指南

基本SSL/TLS配置

1. 获取SSL证书

首先需要获取有效的SSL证书,可以选择: - 从证书颁发机构(CA)购买(如DigiCert, GlobalSign等) - 使用Let's Encrypt免费证书 - 生成自签名证书(仅用于测试)

2. 基本配置示例

server {
    listen 443 ssl;
    server_name example.com;

    # 证书文件路径
    ssl_certificate /path/to/your_domain_name.crt;
    ssl_certificate_key /path/to/your_private.key;

    # 启用会话缓存以提高性能
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 指定协议和密码套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    # 其他配置...
}

高级安全配置

1. 启用HTTP严格传输安全(HSTS)

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

2. OCSP Stapling配置

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/ca_bundle.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

3. 禁用旧版协议和不安全密码

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:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';

性能优化

1. 会话恢复

ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;

2. DH参数

ssl_dhparam /path/to/dhparam.pem;

生成DH参数文件:

openssl dhparam -out /etc/nginx/dhparam.pem 4096

自动重定向HTTP到HTTPS

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

使用Let's Encrypt证书

  1. 安装Certbot:
sudo apt install certbot python3-certbot-nginx
  1. 获取证书:
sudo certbot --nginx -d example.com -d www.example.com
  1. 自动续期测试:
sudo certbot renew --dry-run

测试SSL配置

使用以下工具测试您的配置: - Qualys SSL Labs: https://www.ssllabs.com/ssltest/ - Mozilla SSL Configuration Generator: https://ssl-config.mozilla.org/

完整示例配置

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

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

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 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:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    # 安全头
    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/html;
    index index.html;

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

通过以上配置,您可以建立一个安全、高效的HTTPS网站。记得根据您的具体需求和环境调整配置参数。