Nginx環境下如果禁用TLS/SSL弱密碼套件
要禁用弱加密套件,核心是修改Nginx的SSL配置,通過ssl_protocols和ssl_ciphers指令精確控制允許的協議和密碼套件。
下面是在Debian 12、Nginx 1.28.0環境下的具體配置步驟:
1. 確定配置文件
首先,需要找到Nginx站點配置文件。通常位于以下位置:
主配置文件: /etc/nginx/nginx.conf
站點可用配置: /etc/nginx/sites-available/ 目錄下對應你域名的文件 (例如 yourdomain.com)
包含目錄: /etc/nginx/conf.d/ 下的 .conf 文件
一般來說,建議修改 /etc/nginx/sites-available/ 下對應站點的配置文件。
2. 編輯配置,禁用弱套件
使用編輯器(如nano或vim)打開配置文件,在 server 塊中找到或添加以下配置指令。這里提供了一個較為通用的安全配置示例:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com; # 替換為你的域名
# SSL證書配置 (請替換為你的證書路徑)
ssl_certificate /etc/ssl/certs/yourdomain.com.crt; # 或 fullchain.pem
ssl_certificate_key /etc/ssl/private/yourdomain.com.key;
# --- 核心配置:禁用弱協議和弱密碼套件 ---
# 1. 只啟用 TLS 1.2 和 1.3,禁用所有舊版協議 (SSLv3, TLSv1.0, TLSv1.1)
ssl_protocols TLSv1.2 TLSv1.3;
# 2. 定義允許的密碼套件列表,僅保留強密碼
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';
# 3. 優先使用服務器定義的密碼套件順序,而非客戶端的順序
ssl_prefer_server_ciphers on;
# 4. (可選,強烈推薦) 啟用Diffie-Hellman參數以支持DHE密碼套件,增強前向安全性
# 需要提前生成:openssl dhparam -out /etc/nginx/dhparam.pem 2048 (或 4096)
# ssl_dhparam /etc/nginx/dhparam.pem;
# 5. (可選) 其他安全優化配置
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off; # 禁用會話票證以提高安全性
# 6. (可選,強烈推薦) 啟用 HSTS (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# 其他 location 配置...
location / {
# ... 你的網站配置 ...
}
}配置說明:
ssl_protocols TLSv1.2 TLSv1.3;:這條指令明確告訴Nginx只接受TLS 1.2和1.3協議的連接,從而徹底禁用存在已知漏洞的SSLv3、TLSv1.0和TLSv1.1。
ssl_ciphers:這里列出的密碼套件組合,優先使用了支持前向保密的ECDHE和DHE算法,搭配強加密的AES-GCM或CHACHA20-POLY1305模式。這行配置等效于排除了所有包含NULL、MD5、DES、RC4等弱算法的套件。
ssl_prefer_server_ciphers on;:啟用后,在進行TLS握手時,服務器會使用自己定義的密碼套件順序(如上所列),而不是客戶端提供的順序,確保優先選擇最安全的套件。
ssl_dhparam:如果你打算使用基于DHE的密碼套件(如上文列表中的DHE-RSA-*),強烈建議生成并使用自定義的DH參數文件,這比使用OpenSSL的默認參數更安全。
3. 驗證并重載配置
修改配置文件后,務必進行語法檢查并重載Nginx服務使配置生效。
# 1. 測試Nginx配置文件語法是否正確 sudo nginx -t # 2. 如果輸出提示 syntax is ok 和 test is successful,則重載Nginx sudo systemctl reload nginx
上一篇:Linux命令:grep命令詳細講解
