首页/安全/加密与证书速查/KeyUsage 与 EKU 的组合规则

KeyUsage 与 EKU 的组合规则

KeyUsage 限制密钥能做什么(签名、加密、签发),EKU 限制证书用于什么场景(TLS 服务端、客户端、代码签名);两者叠加决定可用范围,配置不当会在特定客户端上失败。

加密与证书速查安全更新于 2026-10-13

两个白名单的分工

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'

常见组合

证书类型KeyUsageEKU
RSA 服务器证书digitalSignature 加 keyEnciphermentserverAuth
ECDSA 服务器证书digitalSignatureserverAuth
客户端证书digitalSignatureclientAuth
CA 证书keyCertSign 加 cRLSign按策略设置或不设
新版校验器对 EKU 更严格:证书包含 serverAuth 才能用于 HTTPS 服务端;多用途场景要显式列出多个 EKU。
keyEncipherment 的必要性在下降:TLS 1.3 与 ECDHE 都不使用 RSA 密钥传输,但保留该位对老客户端兼容性更友好。
为省事给证书塞入全部 EKU 会扩大用途面,等于放弃最小权限;一旦私钥泄露,攻击者可拿它冒充服务端或签代码。
排查顺序建议先看 EKU 再看 KeyUsage:业务场景不匹配一眼就能看出,而操作位的缺失往往要结合具体套件与用途才能判断。
签发申请里通常能直接指定这两个扩展:在申请阶段就按用途填写,比事后返工重签省事得多,也避免临时证书被反复复用到不该用的场景。

易错点

  • 为省事给证书塞入全部 EKU,扩大用途面反而弱化最小权限
  • 密钥用法与套件不匹配(例如仅有 serverAuth 却按 RSA 密钥传输思路排障)时出现莫名失败
  • CA 证书缺少 keyCertSign 或 basicConstraints 不为 CA:TRUE,导致无法签发下级
  • 只检查 EKU 不看 KeyUsage,漏掉允许用途但不允许该操作的组合错误
  • 忽略客户端差异:同一张证书在宽松实现上可用,在严格实现上被拒

数据来源与参考

  • RFC 5280 §4.2.1.3(KeyUsage)
  • RFC 5280 §4.2.1.12(EKU)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌