提问人:Kevin 提问时间:1/26/2012 最后编辑:Edward BreyKevin 更新时间:1/21/2015 访问量:1768
浏览器可以访问 Web 服务,但我的 C# 应用出现“无法建立信任关系”
Browser can access web service, but my C# app gets "Could not establish trust relationship"
问:
我在 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”帐户下运行,但“Network Service”未列在 MMC 中的“服务帐户”下。我检查了以下服务帐户,它们都具有正确的证书(我从未复制过它们,因此我假设这是因为它们在本地计算机帐户中):
- 计算机浏览器
- 网络连接
- 网络管理器
我完全被难住了。这就像 .NET 无权访问证书一样。我希望我可以使用类似于 Java 的密钥库。有没有人遇到过这种情况?
答:
在处理管道早期的某个位置:
ServicePointManager.ServerCertificateValidationCallback = (a,b,c,d) => true;
这是为了确保接受所有证书。
当然,正如 John 所指出的,这种通用回调可能很危险,因此请对其进行微调,以便一方面它解决了您的问题,另一方面它不会引入任何安全问题。
我希望约翰现在满意。我应该更健谈,他也应该:)
评论
我也有类似的问题。我通过删除证书,重新安装它们并重新启动PC和IIS来解决。此外,请确保您的证书尚未过期,并且在计算机的存储中是受信任的。
下一个:从临时表插入
评论