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) 如何准确验证?的主要内容,如果未能解决你的问题,请参考以下文章