在C#中手动信任SSL证书

时间:2012-07-19 12:00:34

标签: c# ssl

我正在用C#开发一个应用程序,它将通过HTTP和SSL与服务器通信。有没有办法让程序信任服务器提供的证书?该证书将与软件一起分发,以便它可以在不涉及外部CA的情况下识别服务器。

澄清:我希望我的客户端应用程序信任在客户端中已经硬编码的单个证书,以便它只相信我自己的服务器。

2 个答案:

答案 0 :(得分:1)

您可以使用BouncyCastle。

  1. 使用DotNetUtilities函数
  2. 将您的CA证书加载到BC usign FromX509Certificate(X509Certificate)班级
  3. 将公钥从服务器证书加载到BC。
  4. 在服务器证书公钥上调用Verify
  5. 这样您就可以检查证书的签名。哪种方式最安全。并且还使您可以在不更新客户端的情况下更新服务器证书。 (只要CA当然有效)

    验证来源:http://www.bouncycastle.org/viewcvs/viewcvs.cgi/csharp/crypto/src/x509/X509Certificate.cs?view=markup行:540

答案 1 :(得分:0)

在我看来,我认为你不能做到这一点,并相信你有一个安全的渠道。如果我错了,有人会纠正我,但SSL中的CA信任链不仅仅是为了验证指纹是否是特定值(或证书的其他部分)。它证明客户端正在与正确的服务器进行通信(由于共享的CA密钥)。 This illustration是一个很好的参考。跳过步骤3,将不允许服务器向客户端证明其身份(抛出证书验证)。

so that it will only ever trust my own server

SSL通过使用共享CA证书(如verisign等)来保证这一点。也许我不明白为什么你会选择而不是按照预期使用SSL。

修改 正如 the_ajp 在他的回答中指出的那样,有一些库(如充气城堡)将对证书链进行全面验证。这些可以手动调用。