WebException无法为SSL/TLS安全通道建立信任关系

Jos*_*den 5 c# asp.net ssl web-services webexception

我的公司开发了一个.NET Web服务和一个使用该Web服务的客户端DLL.Web服务通过ssl托管在我们的服务器上,证书由GoDaddy提供并签名.我们在托管环境中有一些客户端在尝试访问我们的Web服务时从客户端DLL收到以下错误消息.

System.Net.WebException底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.

我们的修复方法是让它们在服务器上打开IE,这对很多托管服务本身就是一个挑战,并转到WSDL网址.IE然后通过安全警报对话框提示他们.它表示证书日期有效且名称与页面名称相匹配,但由您未选择信任的公司发布.当他们单击是继续时,客户端DLL可以成功连接到Web服务并正常运行.

有谁知道为什么GoDaddy不会出现在有效的出版商名单中?我们运行的所有服务器都将GoDaddy作为有效权限.我猜测,出于安全原因,他们已经卸载了GoDaddy的权限,但并不完全相信没有其他潜在的问题.

不幸的是,我没有太多运气试图在本地重新创建.如果我进入Internet选项并删除GoDaddy权限并点击我们的服务,ssl工作正常.我回到发布者列表中,GoDaddy重新进入.所以我的第二个问题是,你如何摆脱GoDaddy所以我可以获得无效的证书警告?

好的,最后一个问题.代码中是否有一种方法可以告诉Web服务忽略无效的证书.我已经看到一些帖子以编程方式使用WCF而不是旧的Web服务.

小智 29

我通过在调用web方法之前添加此行来修复此错误:

System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };
Run Code Online (Sandbox Code Playgroud)

  • 除非您添加自定义逻辑来验证您的证书,否则这不是解决方案。您不能只接受生产中的任何证书。如果您忽略证书验证并接受任何证书,则使用 SSL/TLS 毫无意义。 (2认同)

dth*_*rpe 6

您可能需要在服务器上安装用于签署SSL证书的中间证书.

浏览器将通过检查签署SSL证书的证书链的验证来尝试验证SSL证书.如果服务器未向证书链提供SSL证书,则浏览器可能会拒绝SSL证书.(Firefox比IE更多的问题).必须仍然在客户端计算机上安装根证书才能使其工作.