我试图弄清楚信任锚在PKI中如何发挥作用。我知道这是证书链的根,用于验证证书是否受信任。如何验证证书? (例如,它如何使用公钥和证书链来验证证书?)
答案 0 :(得分:1)
证书将身份绑定到公钥。
假设您收到我发来的经过数字签名的电子邮件。如果您使用拥有的公钥来验证签名,那么只要您相信人们会将私钥保密,您就会知道电子邮件来自具有与该公钥相对应的私钥的人。
如果您确定自己拥有的公钥是我的(例如,因为我亲自将它交给了您),那么这就是您需要知道的。问题是您并不总是知道这一点。任何人都可以创建一个密钥对,然后在Internet上虚假地声称自己是我,发送公共密钥,或者设置一个虚假地声称自己为StackOverflow的Web服务器,或者其他任何方法。您可以从一个独立的来源中找到Google的电话号码,然后打电话给他们以确认您拥有正确的密钥,但是如果您每次都想建立安全的TLS连接时都必须这样做,那么电子商务的意义将更大比现在低效。
一种解决方案是获取证书。其中包含由认证中心进行数字签名的公钥和身份信息(例如,名称和地址,域名,电子邮件地址)。如果您使用证书颁发机构的公钥验证证书中的签名,那么您将知道可以访问证书颁发机构的私钥的某人乐于签署证书,说明他们同意该身份与该公钥一起使用。如果您相信证书颁发机构不会这样做,除非已采取合理的步骤来验证这是正确的(例如,通过确保他们看到了该人的个人身份文件,并验证该人具有与该公钥相对应的私钥)。将会出现在证书中),那么您可以相信自己拥有合适的密钥给正确的人。
但是,即使您对此信任,也只会使问题更上一层楼,因为要使用证书颁发机构的公钥验证签名中的证书,您首先需要确保您拥有正确的公钥。该证书颁发机构。因此,您可能会获得该证书颁发机构的证书,并发现它是由其他证书颁发机构颁发的,依此类推。
您显然无法验证无限的证书链,因此在某些时候这一切都必须停止。最终,您必须验证您是否具有用于顶级证书颁发机构的正确公钥,而无需依赖其他证书来这样做,这就是您的信任锚。
因此,假设您有我的证书,并且看到它是由ABC证书颁发机构(您从未听说过的证书颁发机构)签署的。您获得了ABC的证书,并使用其中的公共密钥来验证我的证书上的签名,这向您证明ABC证书颁发机构确实确实签发了我的证书。
然后,您查看ABC证书颁发机构的证书,并看到它由DEF证书颁发机构签名,DEF证书颁发机构是您确实信任的证书颁发机构,并且您已经拥有该证书的自签名证书或信任锚。您使用DEF证书中的公钥来验证ABC证书中的签名,这向您证明DEF确实为ABC颁发了该证书。
为确保我的证书有效,因此您需要做一些事情并做一些假设:
您需要获取并信任DEF证书颁发机构的(自签名)证书,这是您的信任锚。在大多数情况下,您的浏览器和/或操作系统将预装一堆由制造商决定信任的CA证书,您将一味地信任制造商对此的判断,但是您可以采取自己的措施来如果愿意,请验证对自己的信任。
您需要确信DEF是合法且可信赖的证书颁发机构,它将保持其私钥的安全,并且除非有充分的理由,否则不会将证书颁发给任何人。同样,您很可能会信任制造商,但是大多数CA都会对其证书颁发过程和控制进行定期审核,因此,如果您担心,您可以掌握该特定CA的最新审核报告,例如。请注意,这样做需要您信任审计师的判断,因此无论您采取哪种方式,有时都必须仅仅因为他们值得信赖就信任某人。
您需要确信DEF不会向ABC证书颁发机构颁发中间CA证书,除非它有充分的理由相信ABC也是一个合法且值得信赖的证书颁发机构,它将确保其私钥的安全并且没有正当理由不颁发证书。在这里,您不直接信任ABC-您信任它,因为DEF信任它,而您也信任DEF。
如果信任锚和最终用户证书之间的链中有一个以上的中间CA证书,则采用相同的逻辑-您正在有效地信任链中的每个中间CA,其理由是前一个CA除非确信它们是可信赖的CA,并且除非它已验证中间CA证书中的公钥确实确实属于该中间CA,否则它不会向他们颁发CA证书。通过使用链中紧接在其之前的CA的公共密钥验证每个中间CA证书中的签名,您可以证明先前的CA确实确实已发行了该证书。由于您明确信任根CA,因此如果您的信任锚位于该链的底部,则您已建立了隐式信任链,使您有信心,您最初感兴趣的最终用户证书是好的
最终,这全都基于以下想法:您只是明确信任少数知名的根CA,然后,如果您可以找到一连串有效的证书,就可以隐式信任Internet上数十亿个其他身份。回到您明确信任的根源之一,如果您愿意接受这样的观念,即该链中的每个中间CA在此基础上都是可信赖的。
现实情况是,证书颁发机构通常在颁发中间CA证书时非常谨慎,并且在将它们颁发给第三方组织时通常会对其加以限制,因此颁发给ACME Inc的中间CA证书只能用于为ACME颁发证书公司员工,或仅针对以.acme.com结尾的域颁发证书。
答案 1 :(得分:0)
信任关系,信任链和信任锚点
例如,访问安全网站时,信任锚与如何建立信任有关。当网站向您提供证书时,您如何知道您可以信任此证书?好吧,因为它被由另一个证书签名,该证书属于您作为证书颁发机构(CA)信任的实体。 (有关签名和验证的更多信息,请参见下文。)但是,您如何信任 CA证书?因为它是由属于您信任的实体的另一个证书签名的。您可以重复执行有关该实体的相同问题并获得有关另一个签名者的相同答案的步骤,直到获得未由另一个证书签名的证书。实际上,它是自签名证书。这称为根证书。因此,您怎么知道信任此证书?答案是您需要这样做,通常是因为它是在安装时与浏览器或其他软件捆绑在一起的,或者仅接受您信任此证书即可。这组与CA证书相关的证书,由另一证书签名,由另一证书签名。 。 。由根证书签名的被称为您的信任链,并且根证书是信任锚,因为它的信任不是来自其他证书;它只是被接受为受信任的,而其他所有证书则直接或间接地从信任锚获得其信任。
什么是数字签名以及如何对其进行验证?
非对称密钥- 有一对与数字证书关联的数字加密密钥。该对由相互之间具有特殊关系的公用和私有键组成。用公钥加密的内容只能用私钥解密,反之亦然。 “非对称”是指以下事实:如果一个用于加密,则另一个必须用于解密,而不是将单个密钥用于加密和解密。顾名思义,私钥由颁发证书的实体保持私有,但是公钥对任何人都可用,实际上,它包含在公开可用的证书中。非对称密钥对使数字签名以及一般的PKI成为可能。
哈希(摘要)- 理解数字签名的另一个概念是哈希或摘要。哈希函数将任意大小的数据作为其输入,并生成此数据的固定大小表示作为其输出。此输出称为数据的哈希或摘要。复杂的哈希算法(例如MD5)会生成具有以下属性的哈希值:
创建和验证签名- 可以通过获取文档的哈希值(例如证书),然后使用签名者的私钥对哈希值进行加密来创建签名。因此,签名只是加密的哈希。证书颁发机构(CA)使用CA证书的私钥为PKI证书创建数字签名。签名始终包含在PKI证书中。
要验证签名,验证实体(例如浏览器)将:
因此,因为您可以使用签名者的公钥对签名进行解密,所以您知道只能使用签名者的私钥对签名进行加密,因此,除非私有密钥受到损害,否则可以签署证书的人是签署证书所属的CA。
并且由于您使用相同的哈希算法创建了相同数据的自己的哈希,并且该哈希与未加密的签名匹配,因此您知道该签名是从您要验证的证书创建的,并且它未被篡改。
总而言之,您已经确定这是一个有效的证书,因为它是由 您信任的实体,因为该实体的证书由实体签名 您信任等等,直到达到您信任的信任锚(根) 通过接受。
希望这能回答您的两个问题。