我对 CA (证书颁发机构) 证书有误解。无论我读了多少东西,还是不太清楚。
举个例子,Bob访问一个网站,为了使Bob和网站之间能够进行可信加密的通信,网站首先向Bob颁发一个数字证书,其中包含公钥和其他信息。
然后,Bob 将使用此公钥加密要发送到网站的数据,网站将使用相应的私钥解密。(这里仅考虑单向通信)
中间人可以伪装成网站并向鲍勃提供他认为有效的数字证书,然后事情就会变得非常糟糕。
如果网站针对此问题使用 CA 来验证或生成自己的证书,我的哪一个陈述是正确的,或者两个陈述都是部分正确的?:
1 ) Bob 只是将从网站收到的数字证书与来自 CA 的数字证书进行比较,因此不执行解密,只是进行比较?在这种情况下,世界上每个 CA 证书是否都存储在 Bob 的本地计算机上以供比较?这是如何发生的。
2) Bob 只有一个特殊的 CA 证书,用于解密来自网站的证书。CA 之前已使用 CA 私钥加密了 Bob 想要使用的网站的数字证书。然后 Bob 从网站获取证书,使用 CA 证书中的 CA 公钥对其进行解密。如果证书无法解密,则显然 CA 未对其进行加密,因此无效。
提前致谢。
答案1
你确实理解错了。事实上,你的两种情况都是错误的。
首先,数字证书是由证书颁发机构(CA)颁发的,其中包含用于数字签名的公钥,并指定签名者的身份。证书用于确认公钥属于签名者,其中CA充当担保人。
该证书是通过互联网而不是在本地向 CA 进行验证的,至于证书的有效性,在此过程中需要从 CA 检索公钥。
公钥用于通过哈希算法来验证签名的对象是否确实是签名的对象并且没有以任何方式进行更改。
一张图片胜过千言万语:
来源 :了解数字签名。
答案2
首先,两步验证 CA 颁发的证书:
- 这个特定的 CA 是否值得信赖来颁发证书?
- 该证书确实是由其声称的 CA 颁发的吗?
你的两个描述几乎都正确一半整个过程的一部分,但完全忽略了另一半。将两者结合起来,你就走上了正确的道路。
但第二点:未使用加密在这种情况下,证书(包含公钥)可用于加密数据,但不是解密。执行的操作是签名验证。
(我怀疑你的一些困惑是由于在某处读到过“在 RSA 中,加密和签名是相同的”。忘掉它吧。虽然在数学意义上基本正确,但在实践中却极具误导性,因为意图两者完全相反。所以当你读到一份关于签署某项文件的文档时,不要假设它的意思与加密它相同。
“该网站的证书确实是由其声称的CA颁发的吗?”
变体 #2 几乎是正确的。至少涉及两个证书 - 一个代表网站(“服务器证书”),另一个代表 CA 本身(称为“CA 证书”或根证书)。
该网站自己的证书是未加密使用 CA 的私钥;签使用 CA 的私钥。如果无法验证签名,则显然 CA 并未真正签署所声称的内容。
(实际上,该链通常会更长一些,至少包含三个证书 - 但机制仍然相同;每个证书都会签署链中的下一个证书。)
但是 Bob 首先从哪里获得这个“特殊 CA 证书”呢?见下文。
“一般来说,这个 CA 是否值得信赖来颁发证书?”
将收到的 CA 证书与存储在本地计算机中的“受信任的根”列表进行比较。
现在,这与变体 #1 中描述的类似,只是计算机不存储所有证书发布由 CA 颁发 – 相反,它仅存储属于 CA 的证书他们自己,即变体#1 中的“特殊 CA 证书”。
大致有50–100大多数系统上都安装了“根证书”——并非“世界上每个 CA”,但涵盖了许多大大小小的公司。(要列入名单需要花费不少钱。)