如何验证自签名证书(How to validate self-signed certificatio

2019-09-22 11:51发布

我将为您提供我的问题清楚,以便你能回答我

我有一个客户端 - 服务器(插座)的连接,我保证使用SslStream而据我所知使用SSL使我确信我的客户将只连接到我的服务器

要做到这一点我必须添加一个功能,我的客户端验证服务器证书,并确保该服务器是真正的一个(我的服务器)

但我真的不明白我怎么能验证我的自签名的证书,并希望您的帮助

问候,我在此先感谢

Answer 1:

试想一下,如果证书未自签名 - 它是由受信任的证书颁发机构签署。 它的工作原理的原因是因为你的客户端设备 - 在Windows,Mac,Linux操作系统,iPhone,Android设备已经全部众所周知的证书颁发机构的证书。 操作系统做的工作,当你进行连接。 它确保了连接过程中发送给客户端的证书是由众所周知的证书颁发机构签署。 这部作品虽然唯一的原因,是因为客户端已经拥有了所有众所周知的证书颁发机构证书。

如果您选择使用自签名证书 - 或自签名证书颁发机构签署的证书 - 你必须做的,而不是操作系统的工作。 然而 - 任务基本上是相同的 - 你需要验证的连接过程中发送给客户端的证书相匹配的期望是什么。 你会需要使用签署了同样的策略证书使用 - 您的客户端必须有预期的证书(或证书链)预装。

你一些如何,某种程度上需要确保你的客户端已经有自签名证书。 具体来说所有的证书中的公共信息。 客户端不会有私钥 - 因为这是...私有。 然后你就可以将代码添加到您的应用程序验证连接期间发送的证书的哈希,这是预先安装的证书的哈希值相匹配。

我注意到你以前也问过类似的问题,你可知道这一切了。 这是一个额外的点:

只要你保持你的自签名证书的私钥绝对安全,没有任何办法可以不假你的自签名证书。 它只是不能做。 如果有人尝试,他们将不得不产生一个新的私钥,这将不符合你的 - 因为他们不知道自己的私钥,因为你保持它的安全。

然后,一切都打破了。 如果他们有不同的私钥,他们将需要一个不同的公共密钥。 这意味着他们将有一个不同的证书哈希值。 而且您的应用已经知道正确的公钥和哈希(如上所述),所以当他们试图以与他们的不良公钥和哈希您的应用程序将拒绝连接 。 这是你在你的应用程序执行的一部分。

如果他们试图利用你的公钥和哈希但使用不同的私有密钥,SSL不会允许他们进行连接。



Answer 2:

为什么不使用受信任廉价的证书?



文章来源: How to validate self-signed certification