密码套件 · 0x00,0x06

TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5

TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5(0x00,0x06)是用于 SSL 3.0, TLS 1.0 的密码套件:RSA 密钥交换、RSA 身份认证、RC2-CBC-40 加密、MD5 消息认证。ssl.sh 评级为“不安全”。

不安全SSL 3.0TLS 1.0数据更新于

详细信息

IANA 名称
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
十六进制码
0x00,0x06 (6)
OpenSSL
OpenSSL 3.5 不支持
GnuTLS
GnuTLS 未实现
密钥交换
RSA
身份认证
RSA
加密算法
RC2-CBC-40
消息认证(MAC)
MD5
TLS 版本
SSL 3.0, TLS 1.0
IANA“Recommended”
D:不建议使用(Discouraged) · DTLS-OK: Y
规范
RFC 4346, RFC 10015

各组成部分说明

密码套件规定了客户端和服务器在一次握手中共同使用的一组算法。TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 由 RSA 密钥交换、RSA 身份认证、RC2-CBC-40 加密和 MD5 完整性保护组成。下面逐项说明每个部分及其已知弱点;整体原理可参考密码套件详解。

密钥交换:RSA 密钥传输。客户端自行生成预主密钥,用服务器证书里的公钥加密(PKCS #1 v1.5 填充)后发给服务器。整个过程没有临时密钥,所以不具备前向保密:只要有人录下流量,日后又拿到服务器私钥,就能解密以前的全部会话。这种填充还是 Bleichenbacher 1998 年选择密文攻击的目标;2017 年的 ROBOT 研究发现,大量线上 TLS 实现仍然泄露这一填充预言,攻击者不需要拿到私钥,就能借服务器解密会话,甚至用服务器的私钥签名。

这是上世纪 90 年代的出口级(EXPORT)套件,为了满足美国当时的出口管制,把加密强度限制在 40 位、RSA 密钥交换限制在 512 位。FREAK(CVE-2015-0204,2015 年 3 月)表明,中间人可以让有漏洞的客户端(包括 OpenSSL 和苹果的 Secure Transport)在根本没有提供出口套件的情况下接受 512 位出口 RSA 密钥,而这种密钥在租用的云服务器上几个小时就能分解。

加密:CBC 模式的 RC2,有效密钥只有 40 位,属于出口级算法,用普通硬件很快就能暴力破解。RFC 9325(2022 年)禁止协商安全强度低于 112 位的任何套件。

模式:CBC,先 MAC 后加密。TLS 1.2 及更早版本先对明文计算 HMAC,再填充、加密,接收方必须先解密才能校验完整性。这种顺序催生了一连串填充预言类攻击:针对 TLS 1.0 可预测 IV 的 BEAST(CVE-2011-3389),利用 MAC 校验耗时差异的 Lucky Thirteen(CVE-2013-0169,2013 年),以及利用 SSL 3.0 不校验填充的 POODLE(CVE-2014-3566,2014 年)。RFC 9325(2022 年)规定,除非同时协商了 encrypt_then_mac 扩展(RFC 7366),否则不应(SHOULD NOT)使用 CBC 套件。

完整性:HMAC-MD5。MD5 从 2004 年起就能实际构造碰撞;HMAC-MD5 本身并未被直接攻破,但 MD5 只残存在加密算法早已过时的套件里,RFC 9155(2021 年)后来也把 MD5 从 TLS 1.2 的签名中移除了。

评级理由

ssl.sh 评级:不安全。理由:

  • 出口级加密(40/56 位密钥),上世纪 90 年代就已不安全,FREAK、Logjam 攻击利用的正是它。
  • 使用 40 位出口级 RC2。
  • 用 HMAC-MD5 做完整性校验;MD5 已被攻破,这类套件已被弃用。

ssl.sh 如何给密码套件评级

哪些 TLS 库支持

以下是 2026-11-10 从各库源码或官方文档读取的 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 支持情况。“默认启用”指不做任何配置就会协商;“支持,默认关闭”指已经实现,但需要手动打开。

库状态说明
OpenSSL 3.5不支持
GnuTLS不支持
BoringSSL不支持
Go crypto/tls不支持
NSS 3.133不支持
Firefox不支持
Java 21 (SunJSSE)不支持
Windows Schannel (Windows 11 / Server 2022)不支持
rustls 0.23.46不支持

这里跟踪的 9 个库都没有默认启用它。没有一个库实现它。

NSS 一行是 NSS 库自身的默认值;Firefox 启动时会先关闭 NSS 的全部套件,只重新打开有 security.ssl3.* 或 security.tls13.* 偏好项的那些。Java 的默认状态依据 Oracle 为 JDK 21 记录的 jdk.tls.disabledAlgorithms 默认值推算,后续更新可能会再加限制。OpenSSL 和 GnuTLS 两行只表示是否实现。

历史与标准状态

TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5(0x00,0x06)在 IANA TLS 密码套件注册表中登记,规范文档为 RFC 4346《The Transport Layer Security (TLS) Protocol Version 1.1》(2006 年 4 月,历史文档)。RFC 4346 后来已被 RFC 5246(2008 年) 废止(obsoleted)。早在 2006 年,TLS 1.1 规范 RFC 4346 就规定 TLS 1.1 实现绝不能(MUST NOT)协商包括本套件在内的出口级套件。它只能在 SSL 3.0, TLS 1.0 中协商。RFC 7568(2015 年)弃用了 SSL 3.0,RFC 8996(2021 年)弃用了 TLS 1.0 和 TLS 1.1,因此已经没有仍被认可的协议版本允许使用它。RFC 10015(2026 年)进一步规定,在 (D)TLS 1.2 中客户端绝不能提供、服务器绝不能选择 RSA 密钥交换套件,IANA 也把这个条目的 Recommended 值改成了 D。

在 Nginx 和 Apache 中启用或禁用

OpenSSL 3.5 没有实现这个套件,标准的 Nginx、Apache httpd 无法提供它,也就不需要专门禁用。

如何测试服务器是否接受它

OpenSSL 3.5 无法提供 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,openssl s_client 不能直接测试;请使用自带该套件实现的扫描工具。

nmap 的 ssl-enum-ciphers 脚本会反复连接,每次只尝试一个套件,最后列出服务器接受的全部套件,并给出 A 到 F 的评级。在输出中查找 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5:

nmap --script ssl-enum-ciphers -p 443 example.com

想解析套件名称或十六进制编号,可以用密码套件查询;SSL 检测会显示线上服务器接受哪些协议版本以及实际协商出的密码套件。

常见问题

TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 安全吗?

不安全。ssl.sh 把它评为“不安全”。出口级加密(40/56 位密钥),上世纪 90 年代就已不安全,FREAK、Logjam 攻击利用的正是它。RFC 10015(2026 年)进一步规定,在 (D)TLS 1.2 中客户端绝不能提供、服务器绝不能选择 RSA 密钥交换套件,IANA 也把这个条目的 Recommended 值改成了 D。

TLS 1.3 能用 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 吗?

不能。它只能用于 SSL 3.0, TLS 1.0,这些版本都已被弃用。TLS 1.3 使用自己的套件,例如 TLS_AES_128_GCM_SHA256。

在 Nginx 或 Apache 里怎么禁用 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5?

不需要禁用:Nginx 和 Apache httpd 通常使用的 OpenSSL 3.5 根本没有实现 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,它们无法协商这个套件。

哪些客户端和库还支持 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5?

不支持:OpenSSL 3.5、GnuTLS、BoringSSL、Go crypto/tls、NSS 3.133、Firefox、Java 21 (SunJSSE)、Windows Schannel (Windows 11 / Server 2022) 和 rustls 0.23.46。

更好的替代

使用 RC2-CBC-40 的其他套件

IANA 名称密钥交换认证评级
TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5KRB5KRB5不安全

资料来源

  1. IANA — TLS Cipher Suites registry
  2. OpenSSL 3.5 — openssl-ciphers(1)
  3. GnuTLS — lib/algorithms/ciphersuites.c
  4. BoringSSL — ssl/ssl_cipher.cc (main) (2026-11-10)
  5. Go — src/crypto/tls/cipher_suites.go (master) (2026-11-10)
  6. Go — src/crypto/tls/defaults.go (master) (2026-11-10)
  7. NSS — lib/ssl/ssl3con.c (as vendored in Firefox) (2026-11-10)
  8. NSS — TAG-INFO (2026-11-10)
  9. Firefox — security/manager/ssl/nsNSSComponent.cpp (2026-11-10)
  10. Firefox — modules/libpref/init/StaticPrefList.yaml (2026-11-10)
  11. Oracle — JDK 21 Providers Documentation: SunJSSE Cipher Suites (2026-11-10)
  12. Oracle — JDK 21 JSSE Reference Guide: jdk.tls.disabledAlgorithms (2026-11-10)
  13. Microsoft Learn — TLS Cipher Suites in Windows 11 (2026-11-10)
  14. Microsoft Learn — TLS Cipher Suites in Windows Server 2022 (2026-11-10)
  15. docs.rs — rustls 0.23.46 crypto::aws_lc_rs (default provider) (2026-11-10)
  16. RFC Editor — RFC index
  17. Nmap — ssl-enum-ciphers