C# 在C中手动信任SSL证书#

C# 在C中手动信任SSL证书#,c#,ssl,C#,Ssl,我正在用C#开发一个应用程序,它将通过HTTP和SSL与服务器通信。有没有办法让程序信任服务器提供的证书?此证书将与软件一起分发,以便它能够在不涉及外部CA的情况下识别服务器 澄清:我希望我的客户端应用程序信任客户端中硬编码的单个证书,这样它将只信任我自己的服务器。您可以使用BouncyCastle 使用X509Certificate(X509Certificate)函数将CA证书加载到BC usignDotNetUtilities类中 将公钥从服务器证书加载到BC中 调用服务器证书公钥上的验证

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


澄清:我希望我的客户端应用程序信任客户端中硬编码的单个证书,这样它将只信任我自己的服务器。

您可以使用BouncyCastle

  • 使用X509Certificate(X509Certificate)函数将CA证书加载到BC usign
    DotNetUtilities
    类中
  • 将公钥从服务器证书加载到BC中
  • 调用服务器证书公钥上的
    验证
  • 这样您就可以检查证书的签名。哪种方法最安全。还可以在不更新客户端的情况下更新服务器证书。(只要CA在场外有效)


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

    这样它就只能信任我自己的服务器了

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

    编辑:
    正如_ajp在他的回答中指出的那样,有一些库(如bouncy castle)可以对证书链进行全面验证。可以手动调用这些证书。

    是否信任每个证书(使用您自己的CA的未完全签名证书绕过证书的验证)或者一些具体的问题?这个问题--应该可以帮助你开始吗?@J.Steen这是我的想法,并添加了我的评论-也许他想验证具体的问题。@Andreasniedermir回调允许,他可以根据需要应用自己的逻辑。=)是的,我希望我的应用程序信任我在服务器上创建并安装的特定证书。我已经阅读了相关的问题和答案,但我不确定我应该如何确切地验证它。有人能举个例子吗?我必须承认,我发现带有证书的SSL结构有点复杂,我想了解更多关于所有内部工作的信息。我习惯于处理SSH,在这里我只需要验证公钥。第4步“证明服务器身份”只不过是比较共名和dnsname而已。@U ajp是的,对不起,看那个图时感到困惑。我是说第三步。我已经编辑了我的答案。对,这就是我在答案中描述的步骤:)@the_ajp Nice!错过了验证签名的机会。很酷。我将编辑我的答案。我只是想应该有一种更简单的方法来验证服务器身份,而不需要实际涉及CA。只要公钥是匹配的,并且相应的私钥只有服务器知道,它就应该是安全的,对吗?这就是SSH的工作方式。所以我仍然需要一个合适的CA证书?没有任何由客户端证书签名的证书,您用来验证服务器证书的证书,将进行验证。因此,自制CA就足够了。