(对不起,我知道这是一个完整的菜鸟问题,冒着发布一些重复主题的风险。我对公/私钥,哈希,数字签名有基本的了解...最近几天我一直在在线搜索和搜索堆栈但似乎无法找到满意的答案。)

示例:
我正在使用开放式wifi上网冲浪,并且是第一次浏览。服务器发回其SSL证书。我的浏览器会执行此操作,并验证该证书是否由它信任的CA签名并且一切都很好。我在网站上单击。但是!

问题:
实际上有人可以简单地向我解释一下我的浏览器如何实际验证服务器证书是否合法吗?是的,对证书本身来说,它说它是由“ Verisign”颁发的,但是在后台验证其不是伪造证书的实际加密魔术是什么?我听说有人解释说“ SSL证书是使用签名CA的公钥进行验证的”,但这对我来说没有意义。我以为公钥是加密数据,而不是解密数据。

很困惑……如果有人可以启发我,请多谢。提前谢谢!

评论

哦,等等,我想我明白了。否则请纠正我。因此,基本上,浏览器验证证书的方式是通过重新生成数字签名(通过CA公钥重新哈希和重新加密),然后查看是否与服务器证书中包含的数字签名相匹配。

实际上,您知道吗,这篇文章为我做了澄清。我不了解加密和签名之间的区别。我以为他们是一样的,让我感到困惑。希望这会对其他人有所帮助:)crypto.stackexchange.com/questions/2123/…

@DeerHunter谢谢。这更多地涉及SSL通常如何工作。我一直迷恋浏览器如何验证证书的逻辑背后。但这是一个很棒的帖子,感谢您的分享!

这个问题集中在证书链的验证上。 SSL / TLS如何工作?它也包含许多方面,它更多地是SSL / TLS的一般描述,并且证书验证的细节很小,很难找到它的一部分。这就是为什么我重新打开此问题,以便不再将其标记为重复的原因。
我尚未阅读答案,但我喜欢这个问题!我今天查阅了20个消息来源,没有人谈论这种魔术。只是“证书包含CA的公钥(每个人都拥有!)就足够了”。现在,让我们看看是否有人回答了这一点!

#1 楼

您认为SSL使用非对称密钥对是正确的。生成一个公钥和一个私钥,也称为公钥基础结构(PKI)。公钥是分发给世界的东西,用于加密数据。但是,只有私钥才能真正解密数据。举个例子:


假设我们俩都去walmart.com买东西。我们每个人都会获得沃尔玛公钥的副本,以与我们签署交易。一旦使用Walmart的公钥对
交易进行签名,则只有Walmart的私有
密钥才能解密该交易。如果我使用沃尔玛的公共密钥副本,它将不会解密您的交易。沃尔玛必须保持其私钥非常私密和安全,否则任何获得它的人都可以
解密与沃尔玛的交易。这就是为什么DigiNotar违规如此之大的原因


现在您已经了解了私钥和公钥对,重要的是要知道谁真正颁发了证书以及为什么要颁发证书。值得信赖。我对此进行了简化,但是有一些特定的根证书颁发机构(CA),例如Verisign,他们对证书进行签名,也对中间CA进行签名。这遵循所谓的信任链,即相互信任的系统链。请参见下面的链接以获得更好的主意(请注意,根CA位于底部)。有权单独签署其域的CA本身。这样可以防止Google为Microsoft签名证书。

由于有了这一信任链,因此可以一直对根CA进行验证。为了证明这一点,DigiCert(以及许多其他工具)具有验证这种信任的工具。 DigiCert的工具在此处链接。我在gmail.com上进行了验证,当您向下滚动时显示如下:



这表明gmail.com的证书是由Google Internet Authority G2颁发的,后者又由GeoTrust Global颁发了证书,而GeoTrust Global则由Equifax颁发了证书。

现在当您转到到gmail.com,您的浏览器不仅会收到哈希值,而且还在继续。不,它与证书一起获得了很多详细信息:例如,如果过期了,您的浏览器将抛出证书错误。如果该证书的所有基本详细信息都已签出,它将一路验证到根CA,该证书是有效的。希望与上面的第一个相似的扩展图像会更有意义: CA,这是您的浏览器固有的信任。

希望这可以帮助您更好地理解!

评论


@ PTW-105因此,公钥解密签名,实体是否事先使用私钥对签名进行签名?

– JVE999
15年4月27日在21:33

@ PTW-105提供给浏览器的SSL证书是公共领域的,任何人都可以复制。如果其他人在其服务器上安装了该怎么办?浏览器如何将ssl证书真正绑定到域?

– KawaiKx
16年4月22日在16:39

@ PTW-105:作为TLS握手的一部分,浏览器从gmail网络服务器(TLS服务器)获取“ gmail.com”证书。之后,浏览器将把中间CA名称标识为“ Google Internet Authority G2”。现在,浏览器将如何以及从何处获得“ Google Internet Authority G2”的证书?然后如何获得“ GeoTrust Global CA”和“ Equifax”的证书?

–rashok
16年7月12日在13:05

@rashok:服务器在握手中发送链证书,请参阅#20803上的“大熊”答案(以上链接)或tools.ietf.org/html/rfc5246#section-7.4.2等。尽管GeoTrust到Equifax的桥梁现在已过时;请参阅security.stackexchange.com/questions/93081/…以及此处的其他链接

–dave_thompson_085
17年8月21日在12:13



您所说的我的沃尔玛公钥副本是什么意思,您是说两个私钥都具有不同的公钥?

–VVK
20年1月13日在17:09

#2 楼

为了澄清@ PTW-105的极好的答案(并在@ JVE999的评论中问)未涵盖的问题中的一点:
数据,而不是解密数据...


密钥具有两种作用-用公钥加密的内容只能用私钥解密,反之亦然。我们只是确定一个是私有的,另一个是公开的,没有概念上的区别。

因此,如果我加密要发送给您的数据,则使用您的公共密钥对它进行加密,只有您才能使用私钥对其进行解密。签名,以证明它来自我,然后我生成消息的哈希,并用我的私钥对该哈希进行加密。这样,任何人都可以使用我的公钥对其进行解密并与实际的消息哈希进行比较,但是他们知道只有我可以对其进行加密,因为只有我才有我的私钥。因此他们知道消息哈希自从我签名以来就没有改变过,因此它来自我。

根据评论,以上内容并不完全正确。请参阅@ dave_thompson_085的注释链接。但是,这不是“如何正确签名”的教程,只是阐明了私钥和公钥在加密诗句签名中的作用。在这方面的基本要点是:


为了加密数据,外部方使用公共密钥,只有私有密钥持有者才能解密它。
要进行签名,私钥持有者使用哈希函数及其私钥(加上适当的填充等)。然后,外部方可以使用公钥验证签名。这样可以确保消息来自私钥持有者(假设没有其他人可以访问私钥)。

有时(取决于实现方式)可以使用与加密相同的密钥对来进行签名,以另一种方式使用,或者可以使用不同的密钥对(请参阅其他链接,也来自@ dave_thompson_085的注释)

评论


签名不是加密;即使对于RSA,它们也只有在您使用不安全的“教科书” RSA(因此在实际应用中被禁止,尤其是从未在SSL / TLS或X.509中禁止使用)以及其他签名算法所使用的RSA时才相似。上面链接的加密货币#2123(2014年之前)中还涉及了crypto.stackexchange.com/q/15997 security.stackexchange.com/q/68822 security.stackexchange.com/q/11879 security.stackexchange.com/q/ 20922

–dave_thompson_085
17年8月21日在12:11



谢谢。这些是有趣的读物。我并不是要详细介绍签名算法,而只是评论两个密钥的相对角色。希望我编辑的答案更加准确。

–亚当
17年8月23日在10:05

#3 楼

除了签名验证之外,证书链验证还有其他要素。
已经提到过要检查网站的TLS证书,以确保证书中的域名与浏览器调用的域名匹配。其他应检查的内容是基本约束不是CA,密钥使用约束应与密钥类型兼容; RSA和ECC密钥可能需要不同的密钥使用权限,以便正确协商TLS握手。构建证书链时,可能会限制从CA衍生的链的长度。这是CA的“基本约束”字段的一部分。可能存在策略限制,但我怀疑浏览器未检查它们。我很高兴听到我是否对此有错。最后,需要检查所有证书的状态以作废和到期。

#4 楼

如果网站具有有效的证书,则意味着证书颁发机构已采取措施来验证该网址确实属于该组织。当您键入URL或链接到安全网站的链接时,浏览器将检查证书的以下特征:
网站地址与证书上的地址匹配
证书由浏览器将其识别为“受信任”证书颁发机构(CA)

TLS和SSL协议均使用称为“非对称”公共密钥基础结构(PKI)系统。非对称系统使用两个“密钥”来加密通信,一个“公共”密钥和一个“私有”密钥。用公钥加密的任何内容都只能用私钥解密,反之亦然。当您访问站点时,网站会提供其公共密钥,您的浏览器会验证该公共密钥,并使用该公共密钥来加密发送的数据(在浏览器与服务器之间),只有服务器/站点具有能够解密数据的私钥。

有关密钥的一些信息:
非对称加密(或公共密钥加密)使用单独的密钥进行加密和解密。任何人都可以使用加密密钥(公共密钥)来加密邮件。但是,解密密钥(专用密钥)是秘密的。这样,只有预期的接收者才能解密消息。最常见的非对称加密算法是RSA;但是,我们将在本文后面讨论算法。

这些站点的完整信誉:

https://www.us-cert.gov/ncas/tips/ST05 -010

https://www.digicert.com/ssl-cryptography.htm