为什么不对CA根证书全部SHA-1进行签名(因为SHA-1被弃用)?


67

我了解SSL证书无法再使用SHA-1进行签名。但是,所有CA根证书都是SHA-1签名的(大多数情况下)。这是否意味着不再对“您的祖母SSL商店”信任的算法适用于世界上最顶级的安全证书?

我想念什么吗?(密钥用法?密钥大小?)


9
并非“所有” CA根证书都是SHA1。
格雷格·阿瑟

5
根证书就像是世界观中的开始假设。信任他们需要信心。
罗伊·廷克

@RoyTinker除了cogito ergo sum之外(请参见根本性疑问,它的答案是:笛卡尔怀疑论)?
尼克T


6
@NickT:请放心-cogito ergo cogito ;-)
tonysdg

Answers:


106

根CA证书的签名完全无关紧要,因为不需要验证它们。它们都是自签名的。

如果您信任根CA证书,则无需验证其签名。如果您不信任它,则其签名对您毫无价值。

编辑:下面有一些非常相关的评论。我不喜欢抄袭或改写它们,并为他们而不是他们的作者称赞。但是,我欢迎人们为这个答案添加解释。


3
提出了为什么要签字的问题
理查德·廷格

42
因为系统不支持未签名的证书。
OrangeDog

在我看来,与可破解的根证书有关的问题不是“您不知道从哪里获得根证书”,而是“您不知道还有谁能够破解此证书并使用它”签署他们想要的任何东西。” 从您的回答看来,这两个(证书和证书签名)是分开关注的,并且证书本身适当地安全且不可破解?
德威·摩根

20
除了“不需要验证它们”之外,我将走得更远。证书链中签名的目的是,较高的权限证明较低的权限。对于根CA,根据定义,没有更高的权限(这就是“根”的含义),因此没有人可以签名证书。如前所述,由于必须对证书进行签名,因此根CA 必须使用“虚拟”签名进行签名,而最简单的方法是自签名。因此,不仅没有必要进行验证,而且验证根CA签名的想法是毫无意义的。
约尔格W¯¯米塔格

13
@DewiMorgan您不能通过散列冲突来“破解”根证书,因为客户端信任证书本身,而不是其(自)签名。您将必须恢复私钥,这是对RSA的攻击,而不是对哈希算法的攻击。
zwol

46

最终,根证书是自签名的。除其本身外,它从未由其他实体签名。根证书通过带外过程获得信任,例如将其提交到受信任的发布者的浏览器列表,或者被Microsoft接受以插入到Windows信任的发布者的默认列表中。

这些证书(以及对它们进行自我签名的公司)(据称是希望)通过了不仅仅是签名的其他方式进行了彻底的审查。


2
更不用说,更新根证书需要再次执行该带外过程。
凯萨尔

4
为“有希望,但有希望”的人+1
内森·奥斯曼

6

唯一重要的情况是,如果根由SHA-1签名,则SHA-1可以将其撤消。也就是说,可以攻击SHA-1的人可以为根构建撤消。而且我绝对确信浏览器不知道该如何保持下去,因此破坏者仅完成了删除SSL连接的任务。真la


1
这是一个有趣的想法,但我怀疑这样做是否会起作用。我的猜测是每个代理都有其自己独特的行为,但是我怀疑任何开发人员都会想到撤消列表将用于管理根证书的撤消。至少,如果在某些情况下可行,那将是由于软件吊销的抽象而不是开发人员有意为之。
Peter Oehlert

1

作为对此的说明,无论如何,某些 CA已经将其根证书和中间证书更新为SHA256。

我知道去年GlobalSign在更新代码签名证书的同时更新了他们的证书,因此我也必须在这些证书上添加他们的新链。

您可以检查哪些特定证书已更新以及哪些证书已更新,但还可以在此处将旧版SHA1证书保留为=> 1

希望能有所帮助。


0

对于根CA,您可以信任CRT中捆绑的CA的公钥,而无需考虑其自签名。

使用.CRT文件格式而不是原始公共密钥来描述CA。PEM允许在其中捆绑更多详细信息-例如CA名称-(同样,签名毫无用处)


-1

很老的,大多是2006年或更早的时代已信任寄托SHA1根证书浏览器能接受,但没有任何新的证书。还记得Firefox和Chrome是用一位数字进行版本控制的吗?

如果根CA使用SHA1证书且Not Before设置为2014年之后,则证书将失败。实际日期限制取决于浏览器或其他应用程序。WebCA论坛在几年前就明确了这一点。通过以下方式自己测试:

  1. 创建用SHA1签名的私有根证书颁发机构基础结构,将其称为rootSHA1
  2. 让rootSHA1创建一个“颁发” CA或“中间” CA,以颁发证书,证书中的证书链接到根。称之为中间体SHA256。
  3. 让中间SHA256发布CA生成使用sha256或更大哈希值签名的证书。称为webServerSHA256。
  4. 将webServerSHA256安装到webServerSHA56.mydomain.com中。
  5. 将rootSHA1,intermediateSHA256和webServerSHA256证书安装到Google Chrome中的适当位置。将根安装到受信任的根证书颁发机构,并通过证书链安装其他根。
  6. 将Google Chrome浏览到https://webServerSHA256.mydomain.com/,并验证webServerSHA256没有绿色挂锁。测试失败。

这是完全错误的。中级证书(和EE /叶证书)确实需要SHA2,而根证书则不需要。Google自己的证书通过其私有CA(Google Internet Authority G3)链接到GlobalSign根CA R2(即SHA1),并且(毫不奇怪)Chrome被接受。
dave_thompson_085

是的,即使您将这些固定的SHA1证书添加到自己的“受信任的根”证书存储中,也将接受这些固定的SHA1证书,但不接受任何新的SHA1根证书。在我的答案中添加了一个测试用例。
rjt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.