我会清楚地向您提供我的问题,以便您可以回答我
我有一个使用 SslStream 保护的客户端-服务器(套接字)连接,据我所知,使用 ssl 确保我的客户端只会连接到我的服务器
为此,我必须向客户端添加一个函数来验证服务器认证并确保服务器是真实的服务器(我的服务器)
但我真的不明白如何验证我的自签名证书并需要你的帮助
问候,并提前致谢
想象一下,如果证书不是自签名的 - 它是由受信任的证书颁发机构签名的。它起作用的原因是因为您的客户端设备 - Windows、Mac、Linux、iPhone、Android 设备已经拥有所有知名证书颁发机构的证书。当您建立连接时,操作系统会为您完成工作。它确保在连接期间发送到客户端的证书由知名证书颁发机构签名。这样做的唯一原因是客户端已经拥有所有知名证书颁发机构的证书。
如果您选择使用自签名证书 - 或由自签名证书颁发机构签名的证书 - 您必须完成这项工作,而不是操作系统。但是 - 任务基本相同 - 您需要验证在连接期间发送到客户端的证书是否与预期相符。您将需要使用与签名证书相同的策略 - 您的客户端必须预先安装预期的证书(或证书链)。
您需要以某种方式确保您的客户已经拥有自签名证书。具体来说就是证书中的所有公开信息。客户端不会拥有私钥——因为那是……私有的。然后,您可以向应用程序添加代码,验证连接期间发送的证书的哈希值是否与预安装的证书的哈希值匹配。
我注意到你以前问过类似的问题,你可能已经知道这一切了。这里还需要补充一点:
只要您保证自签名证书的私钥绝对安全,任何人都无法伪造您的自签名证书。这是做不到的。如果有人尝试,他们将不得不生成一个与您的不匹配的新私钥 - 因为他们不知道您的私钥,因为您保证了它的安全。
然后一切都崩溃了。如果他们有不同的私钥,他们将需要不同的公钥。这意味着他们将拥有不同的证书哈希。并且您的应用程序已经知道正确的公钥和哈希值(如上所述),因此当他们尝试使用错误的公钥和哈希值进入时,您的应用程序将拒绝连接。这是您必须在应用程序中执行的部分。
如果他们尝试使用您的公钥和哈希但使用不同的私钥,SSL 将不允许他们建立连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)