密码套件 · 0x00,0x14

TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA

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

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

详细信息

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

各组成部分说明

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

密钥交换:DHE,即临时有限域 Diffie-Hellman。每次握手生成新的 DH 密钥对,因此具备前向保密;但在 TLS 1.2 中 DH 群完全由服务器决定,客户端无法要求更强的群,RFC 7919(2016 年)虽然加入了可协商的 FFDHE 群,实际采用很少。Logjam(CVE-2015-4000,2015 年)攻破了仍接受 512 位出口级 DH 群的服务器,并揭示大量网站共用同一小批 1024 位素数;2020 年的 Raccoon 计时攻击则利用了 TLS 1.2 会去掉 DH 共享密钥前导零字节这一做法。RFC 9325(2022 年)正是以这些理由要求 TLS 1.2 实现不要协商 TLS_DHE_* 套件。

这是上世纪 90 年代的出口级(EXPORT)套件:为满足美国当时的出口管制,加密被削减到 40 位,Diffie-Hellman 群被限制在 512 位。Logjam(CVE-2015-4000,2015 年 5 月)表明,中间人可以把正常的 DHE 握手降级成仍被服务器接受的 DHE_EXPORT,再在几分钟内破解 512 位群;原因是大多数服务器用的是同一小批素数,耗时的预计算对每个素数只需做一次。

身份认证:服务器用 RSA 证书证明身份,用私钥对握手中的密钥交换参数签名。RSA 密钥只用来签名,因此不影响前向保密。公开受信任的 CA 签发的 RSA 证书,密钥至少 2048 位。

加密:只保留 40 位秘密密钥的 DES,属于出口级算法,用普通硬件很快就能暴力破解。RFC 9325(2022 年)禁止协商安全强度低于 112 位的任何套件,并点名包括 40 位和 56 位的出口级算法。

模式: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-SHA1。SHA-1 已能实际构造碰撞(SHAttered,2017 年),但 HMAC 的安全性并不依赖抗碰撞性,所以 HMAC-SHA1 记录 MAC 并不被认为已被攻破,这个套件的弱点在别处。

评级理由

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

  • 出口级加密(40/56 位密钥),上世纪 90 年代就已不安全,FREAK、Logjam 攻击利用的正是它。
  • 使用单 DES,56 位密钥可被暴力破解;RFC 5246 已从 TLS 1.2 中删除 DES 套件。

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

哪些 TLS 库支持

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

库状态说明
OpenSSL 3.5不支持
GnuTLS不支持
BoringSSL不支持
Go crypto/tls不支持
NSS 3.133不支持
Firefox不支持
Java 21 (SunJSSE)支持,默认关闭被默认 jdk.tls.disabledAlgorithms 中的“DES”屏蔽
Windows Schannel (Windows 11 / Server 2022)不支持
rustls 0.23.46不支持

这里跟踪的 9 个库都没有默认启用它。支持但默认关闭:Java 21 (SunJSSE)。

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

历史与标准状态

TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA(0x00,0x14)在 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 中客户端绝不能提供、服务器绝不能选择 FFDHE 套件,IANA 也把这个条目的 Recommended 值改成了 D。

在 Nginx 和 Apache 中启用或禁用

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

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

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

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

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

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

常见问题

TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA 安全吗?

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

TLS 1.3 能用 TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA 吗?

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

在 Nginx 或 Apache 里怎么禁用 TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA?

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

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

需要显式配置才会使用:Java 21 (SunJSSE)。不支持:OpenSSL 3.5、GnuTLS、BoringSSL、Go crypto/tls、NSS 3.133、Firefox、Windows Schannel (Windows 11 / Server 2022) 和 rustls 0.23.46。

更好的替代

使用 DES40-CBC 的其他套件

资料来源

  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