我正在用 C# 开发一个应用程序,它将通过 HTTP 和 SSL 与服务器通信。有什么方法可以让程序信任服务器提供的证书?该证书将与软件一起分发,因此它可以在不涉及外部 CA 的情况下识别服务器。
澄清:我希望我的客户端应用程序信任已在客户端中硬编码的单个证书,以便它只会信任我自己的服务器。
您可以使用 BouncyCastle。
DotNetUtilities
类中FromX509Certificate(X509Certificate)
Verify
服务器证书公钥这样您就可以检查证书的签名。哪种方式最安全。并且还使您可以在不更新客户端的情况下更新服务器证书。(只要 CA 在课程外有效)
验证来源:http: //www.bouncycastle.org/viewcvs/viewcvs.cgi/csharp/crypto/src/x509/X509Certificate.cs ?view= markup Line:540
在我看来,我认为您无法做到这一点并相信您拥有安全的渠道。如果我错了,请有人纠正我,但 SSL 中的 CA 信任链不仅仅是为了验证指纹是否是特定值(或证书的其他部分)。它证明客户端正在与正确的服务器通信(由于共享 CA 密钥)。这个插图是一个很好的参考。跳过第 3 步,将不允许服务器向客户端证明其身份(抛出证书验证)。
so that it will only ever trust my own server
SSL 通过使用共享 CA 证书(如威瑞信等)来保证这一点。也许我不明白为什么您会选择不按预期使用 SSL。
编辑: 正如the_ajp在他的回答中指出的那样,有一些库(如充气城堡)将对证书链进行全面验证。这些可以手动调用。