我会清楚地向您提供我的问题,以便您回答我
我有一个客户端 - 服务器(套接字)连接,我使用SslStream保护,因为我知道使用ssl确保我的客户端只会连接到我的服务器
要做到这一点,我必须向我的客户端添加一个功能来验证服务器认证,并确保服务器是真实的(我的服务器)
但我真的不知道如何验证我的自签名认证并希望得到你的帮助
此致并提前致谢
答案 0 :(得分:5)
想象一下,如果证书不是自签名的 - 它由受信任的证书颁发机构签名。它的工作原因是因为你的客户端设备 - windows,mac,linux,iphone,android设备已经拥有所有知名证书颁发机构的证书。进行连接时,操作系统会为您完成工作。它确保在连接期间发送到客户端的证书由众所周知的证书颁发机构签名。这可行的唯一原因是因为客户端已经拥有所有知名证书颁发机构的证书。
如果您选择使用自签名证书 - 或由自签名证书颁发机构签名的证书 - 您必须执行工作,而不是操作系统。但是 - 任务基本相同 - 您需要验证在连接期间发送到客户端的证书是否符合预期。您需要使用签名证书使用的相同策略 - 您的客户端必须预先安装预期的证书(或证书链)。
有些方法,您需要某种方式确保您的客户已经拥有自签名证书。特别是证书中的所有公共信息。客户端将没有私钥 - 因为那是私有的。然后,您可以向应用程序添加代码,验证连接期间发送的证书的哈希值是否与预安装的证书的哈希值匹配。
我注意到你之前曾问过类似的问题,你可能已经知道了这一切。这是另外一点:
只要您保持自签名证书的私钥绝对安全,任何人都无法伪造您的自签名证书。它无法完成。如果有人尝试,他们将不得不生成一个与您不匹配的新私钥 - 因为他们不知道您的私钥,因为您保证了它的安全。
然后一切都崩溃了。如果他们有不同的私钥,他们将需要一个不同的公钥。这意味着他们将拥有不同的证书哈希。 并且您的应用已经知道正确的公钥和哈希(如上所述),因此当他们尝试使用他们糟糕的公钥和哈希时,您的应用将拒绝连接。这是您在应用程序中必须执行的操作。
如果他们尝试使用您的公钥和哈希但使用不同的私钥,SSL将不允许他们建立连接。
答案 1 :(得分:0)
为什么不使用值得信赖的廉价证书?