手动信任C#中的SSL证书#
我正在C#中开发一个应用程序,它将通过HTTP和SSL与服务器进行通信。有什么方法可以让程序信任服务器提供的证书?此证书将与软件一起分发,以便它可以识别服务器而不涉及外部CA.手动信任C#中的SSL证书#
说明:我希望我的客户端应用程序信任已在客户端进行硬编码的单个证书,以便它只会信任我自己的服务器。
您可以使用BouncyCastle。
- 使用
FromX509Certificate(X509Certificate)
功能 - 负载从服务器证书分为公元前公共密钥加载了CA证书到BC usign
DotNetUtilities
类。 - 的服务器证书公钥
这样你检查证书的签名呼叫Verify
。哪一种方法最安全?并且还可以在不更新客户端的情况下更新服务器证书。 (只要CA是有效的偏离方向)的
所以我仍然需要一个适当的CA证书? – 2012-07-19 16:10:59
没有任何证书在客户端用于验证服务器证书的证书进行验证。所以一个自制的CA就足够了。 – albertjan 2012-07-19 16:30:43
在我看来,我不认为你可以做到这一点,相信你有足够的安全通道。如果我错了,有人会纠正我,但SSL中的CA信任链不仅仅用于验证指纹是否是特定值(或证书的其他部分)。它证明客户端正在与正确的服务器通信(由于共享CA密钥)。 This illustration是一个很好的参考。跳过第3步,将不允许服务器向客户端证明其身份(抛出证书验证)。
so that it will only ever trust my own server
SSL保证这通过使用共享的CA证书(如Verisign等)。也许我不明白你为什么要选择不是因为它的意图使用SSL。
编辑: 作为the_ajp指出在他的回答中,有库(比如充气城堡),将做证书链的全面核查。这些可以手动调用。
您是否想要信任每个证书(绕过证书的证书,也就是使用您自己的CA的未完全签名的证书)或某些特定证书? – 2012-07-19 12:03:18
这个问题 - http://stackoverflow.com/questions/7485313/check-self-signed-certificate-ssl-c - 应该可以帮助你开始? – 2012-07-19 12:03:27
@ J.Steen这就是我想过的,并添加了我的评论 - 也许他想要验证特定的.. – 2012-07-19 12:04:10