等保三级要求必须禁用RC4、3DES、DES、MD5、SHA1(PRF/签名中)、EXPORT、NULL、ANONYMOUS、PSK等全部弱算法,强制启用TLSv1.2+,且仅保留支持PFS和AEAD的强套件(如ECDHE-AES128-GCM-SHA256),配置后须用nmap或SSL Labs实测验证协商结果。

直接说结论:仅靠删掉 RC4 和 3DES 关键字远远不够,等保三级明确要求禁用 RC4、3DES、DES、MD5、SHA1(在 PRF 或签名中)、EXPORT、NULL、ANONYMOUS、PSK 等全部类型,且必须强制启用 TLSv1.2+,同时只保留支持前向保密(PFS)和 AEAD 认证加密(如 AES-GCM、CHACHA20-POLY1305)的套件。
如何验证当前 ssl_ciphers 是否仍含弱算法
别信配置文件里写了什么,要实测服务器实际协商出的套件:
- 用
openssl s_client -connect example.com:443 -cipher ALL 2>/dev/null | grep "Cipher is"查看所有能连上的套件;如果输出里出现RC4-SHA、ECDHE-RSA-DES-CBC3-SHA、AES128-SHA(含-SHA但非-SHA256或-SHA384)等,说明没清干净 - 更准的检测方式是
nmap --script ssl-enum-ciphers -p 443 example.com,它会分类标出weak、insecure套件,比如看到3DES-EDE-CBC-SHA被标记为SWEET32就得立刻处理 -
testssl.sh -p example.com:443可进一步确认是否还残留SSLv3或TLSv1.0——这些协议本身已不合规,哪怕套件再强也不行
ssl_ciphers 配置必须满足的三个硬性条件
等保不是“尽量安全”,而是“不满足即不通过”。以下三点缺一不可:
- 只显式列出支持 PFS 的密钥交换 + AEAD 加密的套件,例如
ECDHE-ECDSA-AES128-GCM-SHA256、ECDHE-RSA-CHACHA20-POLY1305、ECDHE-ECDSA-AES256-GCM-SHA384;AES128-SHA这类 CBC 模式 + SHA1 的组合必须剔除 - 完整禁用所有含
RC4、DES、3DES、MD5、SHA1(注意:ECDHE-RSA-AES128-SHA256中的SHA256是允许的,但-SHA后缀默认指 SHA1)、EXPORT、NULL、ANONYMOUS的字符串;正则匹配都过不了审,必须从源头清除 - 配合
ssl_protocols TLSv1.2 TLSv1.3,且ssl_prefer_server_ciphers off(现代客户端协商更可靠,开反而可能降级到弱套件)
常见错误配置与修复示例
很多团队改完以为好了,结果扫描还是不通过,问题往往出在细节上:
- 误把
ssl_ciphers 'HIGH:!aNULL:!MD5:!RC4';当成安全配置——HIGH是 OpenSSL 内置别名,不同版本含义不同,!RC4不能保证排除3DES或SHA1-PRF,等保不认这种模糊写法 - 漏掉 TLSv1.3 的兼容性影响:TLSv1.3 不读取
ssl_ciphers,但若ssl_protocols没显式包含TLSv1.3,旧客户端可能 fallback 到 TLSv1.2 的弱套件;务必写全ssl_protocols TLSv1.2 TLSv1.3 - 复制网上“推荐配置”但没删干净注释或换行符,比如配置末尾多了一个空格或中文逗号,导致 Nginx 解析失败,回退到默认值(默认含大量弱套件)
- 正确写法示例:
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';
为什么必须用 nmap/SSL Labs 二次验证
因为 Nginx 配置生效 ≠ 客户端实际协商结果。容易被忽略的关键点:
- OpenSSL 版本太低(如 1.0.2)不支持
CHACHA20-POLY1305,即使你配了,客户端也会跳过,最终协商出次优但仍在黑名单里的套件 - 某些 Android 4.x 或 Windows XP 客户端强制要求
SHA1签名,若你只配了-SHA256套件,它们会断连——但这不是妥协理由,等保明确要求业务系统应淘汰此类老旧终端 - SSL Labs 测试结果里 “Handshake Simulation” 会列出各客户端实际拿到的套件,比本地
openssl s_client更贴近真实访问场景;只要其中任一主流浏览器(Chrome/Firefox/Safari/Edge)协商出带3DES或SHA的套件,就算不通过


















