温馨提示×

如何确保ubuntu nginx的ssl安全

小樊
40
2025-11-23 07:40:59
栏目: 云计算

Ubuntu 上 Nginx SSL/TLS 安全加固清单

一 证书与基础配置

  • 使用受信任 CA 的证书(如 Let’s Encrypt),通过 Certbot 自动获取与续期:sudo apt install certbot python3-certbot-nginx 然后执行 sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com;证书路径通常为 /etc/letsencrypt/live/yourdomain.com/fullchain.pemprivkey.pem
  • 强制全站 HTTPS:在监听 80 端口的 server 中使用 return 301 https://$host$request_uri;,确保用户与搜索引擎都走加密通道。
  • 基本安全头与隐藏版本:在 443 端口 server 中加入 add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always; 以及 server_tokens off;,减少信息泄露与降级攻击面。

二 协议与加密套件

  • 仅启用 TLSv1.2/TLSv1.3,禁用 SSLv3/TLSv1.0/TLSv1.1 与不安全算法(如 RC4)。
  • 优先选择支持 ECDHE 的套件以获得 Forward Secrecy(FS)。示例(按安全与兼容性平衡):
    • TLSv1.3 套件:ssl_ciphersuites TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256;
    • TLSv1.2 套件: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; 让服务器优先选择安全套件。

三 性能与防护增强

  • 启用 HTTP/2 提升性能(需 Nginx ≥ 1.9.5 且 OpenSSL ≥ 1.0.2):listen 443 ssl http2;
  • 会话复用与超时:ssl_session_cache shared:SSL:10m; 与 ssl_session_timeout 5m;,降低握手开销。
  • 安全响应头(按需增强):X-Frame-Options SAMEORIGIN; X-Content-Type-Options nosniff; X-XSS-Protection 1; mode=block; Referrer-Policy strict-origin-when-cross-origin; 以及 Content-Security-Policy(依据站点策略设置)。

四 验证与运维

  • 配置语法与生效:修改后先执行 sudo nginx -t,无误再 sudo systemctl reload nginx。
  • 在线评测:使用 SSL Labs 测试,目标达到 A+
  • 证书续期:Let’s Encrypt 证书有效期 90 天,确认 Certbot 已设置自动续期,并定期执行 sudo certbot renew –dry-run 做演练。

五 最小化可用配置示例

# 强制 HTTP -> HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

# HTTPS 主配置
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_protocols TLSv1.2 TLSv1.3;
    ssl_ciphersuites TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256;
    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:10m;
    ssl_session_timeout 5m;

    # 安全头
    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;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    server_tokens off;

    # 站点根目录与默认文件
    root /usr/share/nginx/html;
    index index.html;
    try_files $uri $uri/ =404;
}

说明:证书路径、域名与根目录请按实际环境替换;完成后执行 sudo nginx -t && sudo systemctl reload nginx。

0