我正在用C#开发一个应用程序,它将通过HTTP和SSL与服务器通信。有没有办法让程序信任服务器提供的证书?该证书将与软件一起分发,以便它可以在不涉及外部CA的情况下识别服务器。
澄清:我希望我的客户端应用程序信任在客户端中已经硬编码的单个证书,以便它只相信我自己的服务器。
答案 0 :(得分:1)
您可以使用BouncyCastle。
DotNetUtilities
函数FromX509Certificate(X509Certificate)
班级
Verify
这样您就可以检查证书的签名。哪种方式最安全。并且还使您可以在不更新客户端的情况下更新服务器证书。 (只要CA当然有效)
答案 1 :(得分:0)
在我看来,我认为你不能做到这一点,并相信你有一个安全的渠道。如果我错了,有人会纠正我,但SSL中的CA信任链不仅仅是为了验证指纹是否是特定值(或证书的其他部分)。它证明客户端正在与正确的服务器进行通信(由于共享的CA密钥)。 This illustration是一个很好的参考。跳过步骤3,将不允许服务器向客户端证明其身份(抛出证书验证)。
so that it will only ever trust my own server
SSL通过使用共享CA证书(如verisign等)来保证这一点。也许我不明白为什么你会选择而不是按照预期使用SSL。
修改强> 正如 the_ajp 在他的回答中指出的那样,有一些库(如充气城堡)将对证书链进行全面验证。这些可以手动调用。