在 Nginx 中禁用 RSA 加密算法(包括 RSA 密钥交换和签名算法),需要通过配置 ssl_ciphers
指令过滤掉所有依赖 RSA 的加密套件,仅保留使用 ECDSA 或其他非 RSA 算法的套件。以下是具体实现步骤:
核心原理
RSA 相关的加密套件通常包含以下特征:
- 密钥交换算法中包含
RSA
(如TLS_RSA_WITH_AES_256_CBC_SHA
) - 椭圆曲线加密中使用 RSA 签名(如
ECDHE-RSA-*
系列)
禁用 RSA 需排除所有包含 RSA
的加密套件,仅保留基于 ECDSA 签名或其他非 RSA 算法的套件(如 ECDHE-ECDSA-*
系列)。
具体配置步骤
1. 找到 Nginx 配置文件
通常位于:
- 主配置:
/etc/nginx/nginx.conf
- 站点配置:
/etc/nginx/conf.d/[域名].conf
或/etc/nginx/sites-available/[域名]
2. 配置 ssl_ciphers
禁用 RSA 套件
在 HTTPS 的 server
块中,设置 ssl_ciphers
仅包含非 RSA 套件,并通过 !
排除所有 RSA 相关套件。
示例配置:
server {
listen 443 ssl;
server_name example.com;
# SSL 证书(若使用 ECDSA 证书,需对应配置)
ssl_certificate /path/to/ecdsa-cert.pem; # 推荐使用 ECDSA 证书(非 RSA)
ssl_certificate_key /path/to/ecdsa-key.pem;
# 禁用所有 RSA 相关加密套件
ssl_ciphers HIGH:!aNULL:!MD5:!RSA;
# 仅允许 TLS 1.2+(高版本协议更安全,且对非 RSA 套件支持更好)
ssl_protocols TLSv1.2 TLSv1.3;
# 优先使用服务器指定的加密套件
ssl_prefer_server_ciphers on;
}
- 配置说明:
- 上述
ssl_ciphers
仅包含ECDHE-ECDSA-*
系列套件,这些套件使用 ECDSA 签名和椭圆曲线密钥交换,完全不依赖 RSA。 - 若需兼容更多场景,可添加其他非 RSA 套件(如
AES-*
中不含 RSA 的套件,但需注意安全性)。 - 建议使用 ECDSA 证书(而非 RSA 证书),否则可能出现证书与加密套件不匹配的问题。
- 上述
3. 验证配置并生效
检查配置语法:
sudo nginx -t
重新加载 Nginx:
sudo nginx -s reload
验证 RSA 是否已禁用
在线工具检测:
使用 SSL Labs SSL Test 测试域名,在“Cipher Suites”部分确认所有套件均不含RSA
。命令行验证:
使用openssl
检查支持的加密套件,确认无 RSA 相关条目:openssl ciphers -v 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256'
输出应仅显示非 RSA 套件。
注意事项
证书兼容性:
- 若使用 RSA 证书,即使禁用了 RSA 套件,仍可能导致握手失败(证书与套件不匹配)。
- 建议更换为 ECDSA 证书(性能更好且与非 RSA 套件兼容)。
客户端兼容性:
- 部分旧客户端可能不支持 ECDSA 套件,需评估业务场景(现代浏览器均支持)。
安全权衡:
- 禁用 RSA 可避免 RSA 潜在的安全风险(如 factorization 攻击),但需确保替换的 ECDSA 套件强度足够(如使用 256 位椭圆曲线)。
通过以上配置,可彻底禁用 Nginx 中的 RSA 加密算法,仅使用更安全的非 RSA 加密套件。