浏览器可以访问Web服务,但我的C#应用​​程序获得“无法建立信任关系”

时间:2012-01-25 18:22:27

标签: c# wcf web-services ssl

我在Windows Server 2003计算机上有一个C#控制台应用程序,它将数据(通过SSL)发送到Windows Server 2003 R2计算机上托管的Web服务。我在MMC(Microsoft管理控制台)中的当前用户和本地计算机证书存储上安装了整个证书链。

我可以在IE和Firefox中点击Web服务(.asmx页面)。我假设因为它使用当前用户证书存储区。但是,我的C#应用​​程序返回以下错误:

  

System.ServiceModel.Security.SecurityNegotiationException:无法与SSL / TLS安全通道建立信任关系   权威'www.samplewebservice.com'。 ---> System.Net.WebException:   底层连接已关闭:无法建立信任   SSL / TLS安全通道的关系。 --->   System.Security.Authentication.AuthenticationException:远程   证书根据验证程序无效。

这几乎就像证书没有存储在MMC中的右侧“帐户”或“容器”中。我浏览了各种服务帐户,他们似乎都有证书。我知道.NET在“NT AUTHORITY \ Network Service”帐户下运行,但“网络服务”未列在MMC的服务帐户下。我检查了以下服务帐户,他们都有正确的证书(我从来没有复制过它们,所以我假设它是因为它们在本地计算机帐户中):

  • 计算机浏览器
  • 网络连接
  • 网络管理员

我完全难过了。就像.NET无法访问证书一样。我希望我可以使用类似于Java的密钥库。有没有人遇到过这个?

2 个答案:

答案 0 :(得分:0)

我有类似的问题。我通过删除证书,重新安装它们并重新启动PC和IIS来解决问题。另外,请确保您的证书尚未过期并且在机器商店中受到信任。

答案 1 :(得分:-1)

处理管道的早期某处:

ServicePointManager.ServerCertificateValidationCallback = (a,b,c,d) => true;

这是为了确保接受所有证书。

当然,正如John指出的那样,这样的一般回调可能是危险的,所以请对其进行微调,以便一方面解决您的问题,另一方面也不会引入任何安全问题。

我希望约翰现在感到满意。我应该更健谈,所以他应该:)。