套件名怎么读
TLS 1.2 的密码套件名是一段可逐词拆解的描述,把密钥交换、身份认证、对称加密与哈希四件事压进一个字符串里。看懂命名规则,就能一眼判断某个套件有没有前向保密、是否用了已被淘汰的算法。
基本信息
| 命名格式 | TLS_密钥交换_认证_WITH_加密算法_哈希 |
|---|---|
| 适用版本 | TLS 1.2 及更早;TLS 1.3 套件名不含密钥交换与认证 |
| 查看方式 | openssl ciphers -v、nmap ssl-enum-ciphers、服务端配置项 |
| 选择原则 | ECDHE + AEAD 优先,CBC 与 RC4 属历史遗留 |
逐段拆解
| 片段 | 含义 | 可取的值 |
|---|---|---|
| TLS_ECDHE | 密钥交换算法,决定有无前向保密 | ECDHE、DHE、RSA |
| RSA | 认证算法,与服务器证书类型对应 | RSA、ECDSA |
| WITH 之前 | 前半段结束标记 | 固定写法 |
| AES_128_GCM | 对称加密算法、密钥长度与分组模式 | AES-GCM、CHACHA20-POLY1305、AES-CBC |
| SHA256 | 握手阶段的 PRF 与 MAC 哈希 | SHA256、SHA384 |
列出与过滤套件
列出与过滤套件
openssl ciphers -v 'ECDHE+AESGCM:ECDHE+CHACHA20' | head # 只看推荐的
openssl ciphers -v 'HIGH:!aNULL:!MD5:!RC4:!3DES' | wc -l # 统计可用套件数
nmap --script ssl-enum-ciphers -p 443 example.com | head -40 # 对端实际支持的套件
openssl s_client -connect example.com:443 -cipher 'ECDHE-RSA-AES256-GCM-SHA384' </dev/null 2>/dev/null | grep -i cipher典型使用场景
- 安全加固:从服务端配置里筛掉不带 ECDHE 的套件,补齐前向保密
- 兼容性排查:老客户端握手失败时,确认服务端白名单里是否还有它能用的套件
- 等保与合规检查:证明线上没有 RC4、3DES、CBC 等弱套件
- 排障握手失败:抓包比对 ClientHello 的套件列表与服务端支持的列表有无交集
- 性能评估:确认加密套件能走 AES-NI 硬件加速,避免纯软件实现拖慢吞吐
常见套件判读
| 套件 | 有没有前向保密 | 评价 |
|---|---|---|
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | 有 | 推荐的现代默认 |
| TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 | 有 | 移动端友好,无 AES-NI 时更快 |
| TLS_RSA_WITH_AES_128_GCM_SHA256 | 无 | 密钥交换用 RSA,应淘汰 |
| TLS_RSA_WITH_3DES_EDE_CBC_SHA | 无 | 已废弃,禁止使用 |
套件名末尾的 SHA256 是握手阶段的哈希算法,不是数据加密算法。真正的数据加密由 AES_128_GCM 这类字段决定,两者容易混淆。
TLS 1.3 的套件名只描述加密与哈希,密钥交换统一走 key_share 扩展并已强制前向保密。看到 TLS_AES_128_GCM_SHA256 时不必再找 ECDHE 字样。