# 密码套件（Cipher Suite，加密套件）是什么？

> 密码套件是 TLS 客户端和服务器协商使用的一组命名的加密算法组合，例如 TLS_AES_128_GCM_SHA256，决定连接用什么算法保护数据。

Source: https://ssl.sh/zh/glossary/cipher-suite/
Last updated: 2026-11-10

密码套件是 IANA TLS 注册表中的一项，用两字节编号标识，规定一条连接使用哪些算法。在 [TLS 1.2](https://ssl.sh/zh/glossary/tls-1-2/) 及更早版本中，名称会写全密钥交换、身份认证、对称加密和 MAC/PRF 哈希：TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 表示 [ECDHE](https://ssl.sh/zh/glossary/ecdhe/) 密钥交换、RSA 签名认证、AES-128-GCM 加密、SHA-256 哈希。到了 [TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/)，套件只描述 AEAD 算法和哈希（如 TLS_AES_128_GCM_SHA256），密钥交换和签名算法另行协商。

## 为什么重要
客户端提供列表，服务器从中选一个。即使协议版本没问题，弱套件（RC4、3DES、NULL、出口级、静态 RSA 密钥交换）也会留下攻击面；双方没有交集时握手直接失败，Chrome 显示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。另外同一套件在不同软件里名字不同：IANA 名 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 在 OpenSSL 里叫 ECDHE-RSA-AES128-GCM-SHA256，TLS_RSA_WITH_3DES_EDE_CBC_SHA 叫 DES-CBC3-SHA。Nginx、宝塔面板用的是 OpenSSL 名称，Java 和 Windows 一般用 IANA 名称，对照时要注意。

## 例子
展开一个 OpenSSL 套件字符串，看它实际启用了哪些套件：

```bash
openssl ciphers -v 'ECDHE+AESGCM'
```

每行依次显示 OpenSSL 名称、最低协议版本、密钥交换（Kx）、认证（Au）、加密（Enc）和 MAC，AEAD 套件显示 `Mac=AEAD`。

## 常见误区
- **名称里数字越大越安全。** AES-128 和 AES-256 都足够强。AES256-SHA（静态 RSA、CBC）反而不如 ECDHE-RSA-AES128-GCM-SHA256，因为前者既没有前向保密也不是 AEAD。
- **ECDHE-ECDSA 套件适用于任何证书。** TLS 1.2 中认证算法必须与证书密钥类型一致，RSA 证书只能用 RSA 认证的套件。
- **服务器必须强制自己的套件顺序。** 如果启用的套件都足够强，让客户端自选反而更好，没有 AES 硬件加速的设备可以选 ChaCha20-Poly1305。

## 相关术语

- [TLS 1.2](https://ssl.sh/zh/glossary/tls-1-2/): TLS 1.2 是 2008 年由 RFC 5246 定义的 TLS 版本，引入了基于 SHA-256 的密钥派生和 AES-GCM 等 AEAD 加密算法，至今仍被广泛使用。
- [TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/): TLS 1.3 是当前最新的传输层安全协议版本（2018 年的 RFC 8446，现行规范为 RFC 9846），完整握手只需一个往返，且只保留 AEAD 加密算法。
- [AEAD](https://ssl.sh/zh/glossary/aead/): AEAD 是带关联数据的认证加密算法，一次运算同时完成数据加密和完整性认证，并能保护不加密的附加数据不被篡改。
- [ECDHE](https://ssl.sh/zh/glossary/ecdhe/): ECDHE 是椭圆曲线上的临时 Diffie-Hellman 密钥交换，TLS 双方每次握手都生成新的椭圆曲线密钥对，并据此协商出共享密钥。
- [AES-GCM](https://ssl.sh/zh/glossary/aes-gcm/): AES-GCM 是以伽罗瓦/计数器模式运行的 AES 分组密码，属于 AEAD 算法，用计数器模式加密、用 GHASH 认证标签保证完整性。
- [ChaCha20-Poly1305](https://ssl.sh/zh/glossary/chacha20-poly1305/): ChaCha20-Poly1305 是把 ChaCha20 流密码与 Poly1305 认证算法组合而成的 AEAD 算法，专为纯软件实现时的高速和恒定时间而设计。
- [密钥交换](https://ssl.sh/zh/glossary/key-exchange/): 密钥交换是 TLS 握手中客户端与服务器建立共享秘密的步骤，保护连接的对称密钥都由这个共享秘密派生而来。
