SSL 证书 (CA) 如何准确验证?

Posted

技术标签:

【中文标题】SSL 证书 (CA) 如何准确验证?【英文标题】:How SSL Certificates (CA) are validated exactly? 【发布时间】:2021-12-18 18:59:01 【问题描述】:

我正在搜索有关如何执行 SSL 验证过程的算法,但几乎在所有地方,他们都将证书验证步骤解释为“证书由客户端检查”或类似的东西,但我想知道这背后的场景是什么。

我知道的是:

    当客户端收到你想尝试握手的属于哪个网站/服务器的证书副本时,有一些指标显示webserver的public信息(我认为这是为了匹配您的浏览器已安装的缓存证书条目中的条目。)

    一旦客户端将缓存证书与网络服务器的证书匹配,它就会开始验证它。 它使用缓存证书的公钥来解密网络服务器的签名。(?[不确定,因为公钥用于“加密”数据,而不是解密。这一步也可能完全错误。] )

    一旦解密,它会比较缓存的签名和网络服务器的签名。如果相同,则证书有效。

    我也听说过链子。我真的很想知道如何知道一个链,以及如何确定网络服务器的证书是否只是属于一个链。(?)

客户端如何检查 SSL 证书?我需要一步一步地得到答案并澄清。谢谢:)

编辑:

我认为这里的公钥用于“解密”而不是“加密”。所以公钥不负责每次加密,它也可以解密并且不加密一些数据。这里的神奇之处在于,由于公钥在这里解密,如果你想伪造证书,你应该拥有那个 CA 的私钥来应用加密的更改(因为只有 private 密钥可以加密数据) .但是现在,另一个问题来了...如果我们使用网络服务器的公钥解密它,然后更改签名中的条目,然后使用我们的自己的私钥再次加密它(我们生成它手动,它不属于服务器。),这实际上让我们表现得像一个 CA;最后覆盖证书以保存我们的自己的公钥,它能够解密用我们的自己的私钥加密的数据?

【问题讨论】:

【参考方案1】:

加密签名之间存在差异。

客户端使用公钥加密只有服务器才能使用服务器的私钥解密的数据。

Public Key 被客户端用来验证服务器发送的数据的签名,该数据只能由服务器的 Private Key 签名。

当客户端想要访问服务器时,服务器会向您发送包含公钥的证书。客户端通常网络浏览器会检查他的集成 CA 的列表证书,如果它包含它。

如果它包含它,客户端继续并获取授权此证书的 CA(证书颁发机构)。 如果没有找到但签名验证通过,客户端会收到警告说证书可能是自签名的并且可能是恶意的。 如果客户端无法验证签名,则说明证书无效。

对于信任链,您可以查看***: https://en.wikipedia.org/wiki/Chain_of_trust

您需要在此信任链中才能在 CA 的网络浏览器集成“数据库”中注册。

希望它能回答你的问题,最好的问候,

M

【讨论】:

【参考方案2】:

简单地说:

私钥 -> 解密和签名 公钥 -> 加密和验证

认证机构

是签署和保证认证真实性的权威机构。如果您信任 CA,那么您也信任它的证书。 朋友也是如此:如果你有一个你信任的朋友,这告诉你“我有一个我信任的朋友”,那么你也信任你朋友的朋友。

证书颁发机构链。

可以有多个中间CA,例如可以有

根证书颁发机构

由根证书颁发机构签署的 WebServer 中间证书颁发机构

由 WebServer 的中间证书颁发机构签署的 Web 服务器证书

用于签名代码的中间证书颁发机构,由根证书颁发机构签名

为什么?

因为万一中间授权机构之一遭到破坏,您只能撤销其子证书。

在企业级别,每个 CA 都有不同的安全级别,例如,根证书颁发机构可以存储在保险箱内,并且仅在有两个或更多管理员时使用。

对于中间人,也许只有一个管理员可以管理它。

参考How SSL WorksHow HTTPS WorksWht digital certificates

【讨论】:

以上是关于SSL 证书 (CA) 如何准确验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用CA证书进行https连接

ssl证书验证

如何制作weblogic单向ssl证书

服务器的SSL证书验证失败问题,怎么解决

如何生成用于SSL/TLS的数字证书

如何在阿里云申请免费SSL证书