【问题标题】:SSL connection to WebService with invalid certificate workaround not workingSSL 连接到具有无效证书的 WebService 解决方法不起作用
【发布时间】:2012-01-23 23:13:07
【问题描述】:

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

我发现了这个漂亮的 sn-p:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

我在 return 语句上设置了一个断点,它从未被调用过(也用单独的方法尝试过)。

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

ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.Expect100Continue = false; //tried true too
ServicePointManager.CheckCertificateRevocationList = false;

我还尝试使用始终返回 true 的 CheckValidationResult 创建自己的 ICertificatePolicy,并将其归因于 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)
  • 尝试删除并重新添加网络引用,就像在我的测试应用中一样。

【问题讨论】:

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

标签: c# web-services ssl https certificate


【解决方案1】:

在为此苦苦思索之后,我们终于找到了解决方案。

它的提示是在内部异常中,它之前没有被注意到。它声明它无法加载安全程序集。

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

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

解决方案是重命名这个程序集,一切都立即完美运行,没有任何缺陷。

经验教训:

  • 使用可能永远不会存在的自定义名称,例如 SPONGEBOBSQUAREPANTS_Security。
  • 不要相信 Visual Studio 会检查我的程序集是否与任何内容发生冲突。
  • 始终检查内部异常,无论外部异常看起来多么熟悉。

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2013-12-13
    • 2018-06-29
    • 2014-10-14
    相关资源
    最近更新 更多