温馨提示×

Debian Nginx SSL怎么配置安全

小樊
39
2026-08-29 09:27:32
栏目: 云计算

下面给你一套在 Debian 上配置 Nginx SSL 的安全实践清单,从「能用」到「安全」逐步加强,适合生产环境。


一、基础环境

# Debian 11/12 示例
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx

二、证书获取(必需)

推荐使用 Let’s Encrypt

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

Certbot 会自动:

  • 申请证书
  • 修改 nginx 配置
  • 设置自动续期

检查续期:

sudo certbot renew --dry-run

三、Nginx SSL 安全配置(核心)

1️⃣ 禁用不安全的协议

只允许 TLS 1.2 及以上:

ssl_protocols TLSv1.2 TLSv1.3;

2️⃣ 使用强加密套件

ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers off;

✅ TLS 1.3 下 ciphers 已不生效,但保留不影响安全


3️⃣ 启用 HSTS(防降级攻击)

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

⚠️ 确认 HTTPS 完全正常后再开启 preload


4️⃣ 启用安全 HTTP 头

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'" always;

5️⃣ 关闭服务器信息泄露

server_tokens off;

四、完整推荐 Nginx SSL 配置示例

server {
    listen 443 ssl http2;
    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_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:
    ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;

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

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;

    server_tokens off;

    root /var/www/html;
    index index.html index.htm;
}

五、HTTP 自动跳转 HTTPS

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

六、加固系统层面(推荐)

1️⃣ 防火墙

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

2️⃣ 禁用 SSL 压缩(防 CRIME)

ssl_compression off;

3️⃣ 使用独立 DH 参数(可选)

openssl dhparam -out /etc/nginx/dhparam.pem 2048
ssl_dhparam /etc/nginx/dhparam.pem;

七、安全检测工具

部署后推荐检测:

  • SSL Labs https://www.ssllabs.com/ssltest/
  • Security Headers https://securityheaders.com/

目标: ✅ SSL Labs A+
✅ HSTS 生效
✅ 无弱加密算法


八、常见坑

❌ 证书路径错误
❌ TLS 1.0 / 1.1 未禁用
❌ HSTS 未确认 HTTPS 就开启 preload
❌ HTTP 未强制跳转 HTTPS


如果你愿意,我可以:

  • ✅ 帮你定制一份适合你业务的 nginx 配置
  • ✅ 根据你的 Debian 版本 / Nginx 版本 精确调优
  • ✅ 帮你做 A+ SSL Labs 配置

直接把你的 nginx 版本和域名场景发我即可。

0