密码套件 · 0x00,0x0B
TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA
TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA(0x00,0x0B)是用于 SSL 3.0, TLS 1.0 的密码套件:DH 密钥交换、DSS 身份认证、DES40-CBC 加密、SHA1 消息认证。ssl.sh 评级为“不安全”。
详细信息
各组成部分说明
密码套件规定了客户端和服务器在一次握手中共同使用的一组算法。TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA 由 DH 密钥交换、DSS 身份认证、DES40-CBC 加密和 SHA1 完整性保护组成。下面逐项说明每个部分及其已知弱点;整体原理可参考密码套件详解。
密钥交换:静态(非临时)Diffie-Hellman。服务器的 DH 公钥固定写在证书里,而不是每次握手临时生成,因此没有前向保密;服务器还必须持有一张装着 DH 公钥、而不是普通 RSA 或 ECDSA 公钥的证书。套件名里的 DSS 只表示 CA 用什么算法给这张证书签名。
这是上世纪 90 年代的出口级(EXPORT)套件:为满足美国当时的出口管制,对称加密只保留 40 位密钥,如今用普通硬件就能暴力破解。
加密:只保留 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 套件。
哪些 TLS 库支持
以下是 2026-11-10 从各库源码或官方文档读取的 TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA 支持情况。“默认启用”指不做任何配置就会协商;“支持,默认关闭”指已经实现,但需要手动打开。
| 库 | 状态 | 说明 |
|---|---|---|
| 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_DH_DSS_EXPORT_WITH_DES40_CBC_SHA(0x00,0x0B)在 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 中客户端绝不能提供、服务器绝不能选择非临时 FFDH 套件,IANA 也把这个条目的 Recommended 值改成了 D。
在 Nginx 和 Apache 中启用或禁用
OpenSSL 3.5 没有实现这个套件,标准的 Nginx、Apache httpd 无法提供它,也就不需要专门禁用。
如何测试服务器是否接受它
OpenSSL 3.5 无法提供 TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA,openssl s_client 不能直接测试;请使用自带该套件实现的扫描工具。
nmap 的 ssl-enum-ciphers 脚本会反复连接,每次只尝试一个套件,最后列出服务器接受的全部套件,并给出 A 到 F 的评级。在输出中查找 TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA:
nmap --script ssl-enum-ciphers -p 443 example.com
想解析套件名称或十六进制编号,可以用密码套件查询;SSL 检测会显示线上服务器接受哪些协议版本以及实际协商出的密码套件。
常见问题
TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA 安全吗?
不安全。ssl.sh 把它评为“不安全”。出口级加密(40/56 位密钥),上世纪 90 年代就已不安全,FREAK、Logjam 攻击利用的正是它。RFC 10015(2026 年)进一步规定,在 (D)TLS 1.2 中客户端绝不能提供、服务器绝不能选择非临时 FFDH 套件,IANA 也把这个条目的 Recommended 值改成了 D。
TLS 1.3 能用 TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA 吗?
不能。它只能用于 SSL 3.0, TLS 1.0,这些版本都已被弃用。TLS 1.3 使用自己的套件,例如 TLS_AES_128_GCM_SHA256。
在 Nginx 或 Apache 里怎么禁用 TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA?
不需要禁用:Nginx 和 Apache httpd 通常使用的 OpenSSL 3.5 根本没有实现 TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA,它们无法协商这个套件。
哪些客户端和库还支持 TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA?
不支持: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。
更好的替代
使用 DES40-CBC 的其他套件
| IANA 名称 | 密钥交换 | 认证 | 评级 |
|---|---|---|---|
| TLS_RSA_EXPORT_WITH_DES40_CBC_SHA | RSA | RSA | |
| TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA | DH | RSA | |
| TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA | DHE | DSS | |
| TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA | DHE | RSA | |
| TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA | DH | anon |
资料来源
- IANA — TLS Cipher Suites registry
- OpenSSL 3.5 — openssl-ciphers(1)
- GnuTLS — lib/algorithms/ciphersuites.c
- BoringSSL — ssl/ssl_cipher.cc (main) (2026-11-10)
- Go — src/crypto/tls/cipher_suites.go (master) (2026-11-10)
- Go — src/crypto/tls/defaults.go (master) (2026-11-10)
- NSS — lib/ssl/ssl3con.c (as vendored in Firefox) (2026-11-10)
- NSS — TAG-INFO (2026-11-10)
- Firefox — security/manager/ssl/nsNSSComponent.cpp (2026-11-10)
- Firefox — modules/libpref/init/StaticPrefList.yaml (2026-11-10)
- Oracle — JDK 21 Providers Documentation: SunJSSE Cipher Suites (2026-11-10)
- Oracle — JDK 21 JSSE Reference Guide: jdk.tls.disabledAlgorithms (2026-11-10)
- Microsoft Learn — TLS Cipher Suites in Windows 11 (2026-11-10)
- Microsoft Learn — TLS Cipher Suites in Windows Server 2022 (2026-11-10)
- docs.rs — rustls 0.23.46 crypto::aws_lc_rs (default provider) (2026-11-10)
- RFC Editor — RFC index
- Nmap — ssl-enum-ciphers