C# 到Web服务的SSL连接具有无效证书解决方案不起作用

C# 到Web服务的SSL连接具有无效证书解决方案不起作用,c#,web-services,ssl,https,certificate,C#,Web Services,Ssl,Https,Certificate,在我的WPF应用程序中,我希望通过HTTPS与Web服务建立连接,忽略可能的证书错误,这似乎是我一直在研究的一件相当常见的事情 我发现了这个漂亮的片段: ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 我已经在return语句上设置了一个断点,但它从未被调用(也用一个单独的方法进行了尝试) 我还尝试将以下属性设置为false: ServicePointManager.Use

在我的WPF应用程序中,我希望通过HTTPS与Web服务建立连接,忽略可能的证书错误,这似乎是我一直在研究的一件相当常见的事情

我发现了这个漂亮的片段:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
我已经在return语句上设置了一个断点,但它从未被调用(也用一个单独的方法进行了尝试)

我还尝试将以下属性设置为false:

ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.Expect100Continue = false; //tried true too
ServicePointManager.CheckCertificateRevocationList = false;
我还尝试创建我自己的ICertificatePolicy,其中的CheckValidationResult始终返回true并将其归因于ServicePointManager.CertificatePolicy。这也没有起作用

在所有这些尝试中,我得到以下几点:

基础连接已关闭:上发生意外错误 接受

我创建了一个单独的windows窗体应用程序,它只有三行代码:

WebReference.MySebService myWebService = new WebReference.MySebService();
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
bool result = myWebService.TestConnection(); 
//TestConnection is a method in my WebService that simply returns true.
它成功了

我还能试什么

信息:

  • WPF应用程序
  • .NET 3.5
  • web服务通过单独的类使用
  • 它与常规HTTP完美结合
  • 不使用代理
  • 在服务器上和本地主机上的WS上都失败
  • 在我的测试应用程序上运行的三行代码在我的WPF应用程序中不起作用
  • WebService的两个实例完全相同(所有属性,包括URL)
  • 尝试删除并重新添加web引用,就像在我的测试应用程序中一样

在强调了很多之后,我们终于找到了解决方案

对它的提示在内部异常中,该异常以前未被注意到。它声明无法加载安全程序集

巧合的是,我们有一个名为Security的项目,该解决方案上有一个名为Security的输出程序集,这导致了冲突。只有在使用SSL时,它才被错误地访问

有趣的是,无论是Visual Studio还是编译器都没有警告过我这不是一个好主意,甚至没有一个.NET程序集的名称和我们的一样

解决方案是重命名此程序集,并且一切立即完美地工作,没有任何缺陷

经验教训:

  • 使用从未存在过的自定义名称,如 海绵宝宝是安全的
  • 不要相信Visual Studio会检查我的程序集是否与任何内容冲突
  • 始终检查内部异常,无论外部异常看起来有多熟悉

您已经显示了WinForms应用程序中的所有代码-您还没有显示WPF应用程序的等效代码。粘贴到我的WPF应用程序中的相同三行代码也不起作用。我分析了我的Web服务的两个实例,它们是相同的。所有标志以及URL属性。您是否尝试过在“解密HTTPS”模式下使用Fiddler作为代理来查看发生了什么?可能还不清楚。。。不过,如果这两个UI对HTTPS通信有任何影响,我会非常惊讶。控制台应用程序怎么样?我现在就试试。我的想法是,由于此行不影响我的任何对象,它将委托应用于.NET运行时的某个地下部分,并且可能项目类型会影响运行时,使用不同的线程,或者类似的内容。我的控制台应用程序尝试: