x.509 V3扩展中的基本约束和密钥用途在创建CA证书时有何区别?

23

这两个动作似乎是相同的:

  • 使用X.509证书中的基本约束扩展来表示它是CA证书
  • 使用密钥用途扩展,例如表示公钥可用于证书签名。

这些扩展之间有什么区别?
它们是否具有相同的目的或相互补充?


你的问题解决了吗?如果是,请接受最佳答案。否则,请说明还缺少什么。 - Paŭlo Ebermann
2个回答

21

"密钥用途(Key Usage)"定义了证书中包含的密钥可以做什么。使用示例包括:加密、签名、签发证书、签发CRL。

"基本约束(Basic Constraints)"用于确定证书主体是否为CA,以及是否允许其签发子证书。

对于一个可用于签署证书的证书,该信息在某种意义上是重复的:

  • X509v3基本约束: CA: TRUE --- 可以签署证书
  • X509v3密钥用途: Key Cert Sign --- 可以签署证书

但是“基本约束”也将指定有效认证链的最大深度。

尽管有重复,但根据RFC 3280 --- X.509,您需要同时指定这两个选项。

这是来自RFC(第29页)的相关段落:

当使用主题公钥验证公钥证书上的签名时,必须设置keyCertSign位。 如果设置了keyCertSign位,则基本约束扩展(4.2.1.10节)中的cA位也必须设置。


"信息在某种程度上是重复的"。您知道实现在执行证书路径验证时,是否接受基本约束或密钥用途来表示CA的验证? - Cratylus
@user384706:不,你需要两个。我已经更新了我的答案并提供了信息。 - Babu Srinivasan
还有一些证书可能由非CA证书颁发:请参见RFC 3820 - 而不是3280 - Bruno

2

密钥用途描述证书的预期用途。

基本限制扩展描述具有该证书作为顶部的证书链可以多深。换句话说,此扩展由CA用于限制其子CA的活动,当子CA证书被颁发时使用该扩展。如果顶级CA获得子CA,则允许子CA发行终端用户证书,但不允许子CA拥有自己的子CA。


@Eugene:我们可以拥有一个带有密钥用途扩展的证书,它可以签署证书,但基本约束缺失吗?这是否与具有基本约束成为具有无限证书路径的CA相同? - Cratylus
根据RFC 5280第4.2.1.9节:“符合标准的CA必须在包含用于验证证书数字签名的公钥的所有CA证书中包括此扩展名,并且必须在这些证书中将该扩展标记为关键性。”因此,看起来你的问题的答案是“这将违反标准”。但是,我确实见过没有此类扩展名的证书。 - Eugene Mayevski 'Callback
@Eugene:Java的PKIX API(在Java6u23中进行了检查)接受仅具有KeyUsage(而非Basic Constraints)的CA证书。这是否意味着Java违反了RFC? - Cratylus
@user384706 我有什么资格去评判他们呢?我引用了RFC,它说扩展必须存在。然而,不接受这样的证书会导致兼容性问题,所以我猜Java的创建者接受不符合规范的证书(至少默认情况下)。 - Eugene Mayevski 'Callback
@Eugene: 兼容性问题?是指什么?符合和不符合规范的实现之间的问题吗? - Cratylus
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接