求助delphi实现ssl验证客户端证书

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助delphi实现ssl验证客户端证书相关的知识,希望对你有一定的参考价值。

呵呵,您可能搞错了一个概念。SSL证书的主要功能是验证和加密。现在很多的像VeriSign、GeoTrust等SSL证书只需要部署在服务器上就可以实现验证您服务器的运维方是否合法,以及对服务器和客户端的传输过程中进行数据加密。您说的客户端要配的那种数字证书是双向身份认证证书,需要做强制双向认证才可以实现。 参考技术A 支持所有浏览器的SSL证书是不需要“要求客户端证书验证”的,因为他的根证书以及内置到各大浏览器和操作系统,只有自签名SSL证书或者不是全球可信的SSL证书才会要求下载一个客户端证书。

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

【中文标题】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

【讨论】:

以上是关于求助delphi实现ssl验证客户端证书的主要内容,如果未能解决你的问题,请参考以下文章

求助delphi实现ssl验证客户端证书

国密证书双向认证客户端发送哪个

如何设置没有ssl证书,就不能访问url?

为啥要使用证书对客户端进行身份验证?

Java:使用自签名证书的 SSL 客户端身份验证

SSL证书签发