我在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的密钥库。有没有人遇到过这个?
答案 0 :(得分:0)
我有类似的问题。我通过删除证书,重新安装它们并重新启动PC和IIS来解决问题。另外,请确保您的证书尚未过期并且在机器商店中受到信任。
答案 1 :(得分:-1)
处理管道的早期某处:
ServicePointManager.ServerCertificateValidationCallback = (a,b,c,d) => true;
这是为了确保接受所有证书。
当然,正如John指出的那样,这样的一般回调可能是危险的,所以请对其进行微调,以便一方面解决您的问题,另一方面也不会引入任何安全问题。
我希望约翰现在感到满意。我应该更健谈,所以他应该:)。