与无效证书解决方法无法正常工作的SSL服务的SSL连接

时间:2011-12-19 21:33:10

标签: c# web-services ssl https certificate

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

我找到了这个漂亮的片段:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

我在return语句中设置了一个断点,并且从不调用它(也使用单独的方法尝试它)。

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

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

我还尝试使用CheckValidationResult创建自己的ICertificatePolicy,它始终返回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
  • 通过单独的课程
  • 使用网络服务
  • 与常规HTTP完美配合
  • 不使用代理
  • 服务器和localhost上的WS都失败
  • 在我的测试应用程序上运行的相同三行将无法在我的WPF应用程序中运行
  • WebService的两个实例完全相同(所有属性,包括URL)
  • 尝试删除并重新添加网络参考,就像在我的测试应用中一样。

1 个答案:

答案 0 :(得分:2)

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

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

巧合的是,我们在这个解决方案中有一个名为Security的项目,其输出程序集名为Security,这引起了冲突。并且只有在使用SSL时才会错误地访问它。

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

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

经验教训:

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