两个白名单的分工
KeyUsage 与扩展密钥用法(EKU)是两个层次不同的白名单:前者限制密钥本身能做什么,比如签名、加密、签发下级证书;后者限制证书能用在什么业务场景,比如 TLS 服务端、客户端、代码签名。两者叠加才决定一张证书的可用范围,任何一侧配错都会在特定客户端上失败。
基本信息
| RSA 服务器证书 | digitalSignature 加 keyEncipherment,后者用于 RSA 密钥传输套件 |
|---|---|
| ECDSA 服务器证书 | digitalSignature,ECDHE 场景不需要 keyEncipherment |
| 客户端证书 | digitalSignature 加 EKU clientAuth |
| CA 证书 | keyCertSign 加 cRLSign,并要求 basicConstraints 为 CA:TRUE |
| 检查方式 | openssl x509 的 -ext keyUsage 与 -ext extendedKeyUsage |
| 严格程度 | 新版校验器对 EKU 的要求更严 |
典型使用场景
- 签发前核对:按用途逐项确认两个扩展是否需要
- 排查用途报错:确认 EKU 是否包含 serverAuth 或 clientAuth
- 自建 CA:为中间与叶证书分别设定正确的 KeyUsage
- 审计整改:清理全用途证书,收敛到最小权限
- 客户端联调:确认目标客户端对 EKU 的严格程度
检查两处扩展
检查两处扩展
# 一次查看密钥用法与扩展密钥用法
openssl x509 -in cert.pem -noout -ext keyUsage -ext extendedKeyUsage
# 按服务器用途校验,用途不符会直接报错
openssl verify -purpose sslserver -CAfile root.pem -untrusted chain.pem leaf.pem
# 确认 basicConstraints 与路径长度
openssl x509 -in cert.pem -noout -text | grep -A2 -i 'basic constraints'常见组合
| 证书类型 | KeyUsage | EKU |
|---|---|---|
| RSA 服务器证书 | digitalSignature 加 keyEncipherment | serverAuth |
| ECDSA 服务器证书 | digitalSignature | serverAuth |
| 客户端证书 | digitalSignature | clientAuth |
| CA 证书 | keyCertSign 加 cRLSign | 按策略设置或不设 |
新版校验器对 EKU 更严格:证书包含 serverAuth 才能用于 HTTPS 服务端;多用途场景要显式列出多个 EKU。
keyEncipherment 的必要性在下降:TLS 1.3 与 ECDHE 都不使用 RSA 密钥传输,但保留该位对老客户端兼容性更友好。
为省事给证书塞入全部 EKU 会扩大用途面,等于放弃最小权限;一旦私钥泄露,攻击者可拿它冒充服务端或签代码。
排查顺序建议先看 EKU 再看 KeyUsage:业务场景不匹配一眼就能看出,而操作位的缺失往往要结合具体套件与用途才能判断。
签发申请里通常能直接指定这两个扩展:在申请阶段就按用途填写,比事后返工重签省事得多,也避免临时证书被反复复用到不该用的场景。