术语表

密钥用途 (Key Usage,KU)

最后核实

定义

密钥用途是 X.509 证书扩展,限定证书公钥可执行的密码学操作,例如数字签名、密钥加密或签发证书。

密钥用途(Key Usage)是 RFC 5280 定义的位串,共九个标志:digitalSignature、nonRepudiation(又称 contentCommitment)、keyEncipherment、dataEncipherment、keyAgreement、keyCertSign、cRLSign、encipherOnly 和 decipherOnly。它描述底层的密码学操作,而 扩展密钥用途 描述“用于 TLS 服务器认证”这类应用层目的。CA 证书使用 keyCertSign 和 cRLSign;TLS 服务器证书使用 digitalSignature,RSA 密钥还常带 keyEncipherment。

为什么重要

扩展存在时客户端就会强制检查,而且它通常被标记为关键,所以标志写错,证书其他方面再正确也会验证失败。标志应与密钥类型和协议对应:ECDSA 密钥用于签名握手数据,需要 digitalSignature;keyEncipherment 是为老式 RSA 密钥交换准备的,即客户端用服务器的 RSA 公钥加密预主密钥。TLS 1.3 已删除这种密钥交换,因此在 TLS 1.3 中 RSA 证书也只用于签名。自己用 OpenSSL 签发内网证书时,漏写或乱写这一扩展是很常见的错误。

例子

X509v3 Key Usage: critical
    Digital Signature, Key Encipherment

这是 RSA 服务器证书的典型写法;ECDSA 服务器证书通常只显示 Digital Signature。

常见误区

  • KU 和 EKU 是一回事。 KU 限制密码学操作,EKU 限制应用用途,两者同时存在时都必须允许该用法。
  • TLS 1.3 需要 keyEncipherment。 TLS 1.3 从不用证书密钥做加密,关键的是 digitalSignature。

延伸阅读