Eve可以用她的私钥签署一个名称为“a.com”的证书,但 Bob 的浏览器不会接受它。当 Bob 的浏览器验证证书链时,它会验证所有签名,而不仅仅是签名。完整的验证算法很复杂;见标准。在这种情况下,Bob 的浏览器在应用第 6.1.4 节中的 check (k) 时会引起隐喻:Eve 的证书是“版本 3”证书,但不包含Basic Constraints扩展名,或者其Basic Constraints扩展名cA设置为FALSE.
简而言之,虽然认证是一种权力委托,但颁发证书的权力是规定需要显式委托的,默认不做。正如@Terry 所说,商业 CA可以授予子 CA 证书,并将cA标志设置为TRUE,但他们会为此收取很多费用。事实上,他们将通过合同约束子 CA 以遵守 CA 的认证实践声明(参见Verisign的 CPS)。合同义务包括与保险商进行大量大笔资金谈判之类的事情,因此颁发假证书的子 CA Eve 将被 Verisign 的法律报复彻底遗忘。他们没有俘虏。
过去的事情过去不是那样工作的。X.509 的第一个版本不支持扩展,因此客户端必须找到其他方法来验证给定实体是否具有 CA 权力。这很不方便,因为浏览器必须在嵌入不断增长的“允许的子 CA”列表之间做出选择,或者只是信任所有具有 CA 权力的证书(从而允许您的攻击)。请注意,直到 2003 年左右,Internet Explorer 中都存在一个错误:IE 根本没有检查Basic Constraints扩展!当这个被发现时,它立即被修补,当然......