9

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

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

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

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

不幸的是,我没有太多运气尝试在本地重新创建它。如果我进入 Internet Options 并删除 GoDaddy 权限并点击我们的服务,ssl 就可以正常工作。我回到出版商列表中,GoDaddy 被重新加入。所以我的第二个问题是,你到底是如何摆脱 GoDaddy 的,这样我才能得到一个无效的证书警告?

好的,最后一个问题。有没有办法在代码中告诉 Web 服务忽略无效证书。我看过一些关于使用 WCF 以编程方式执行此操作的帖子,但不是旧的 Web 服务。

4

5 回答 5

34

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

System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };
于 2013-08-06T16:18:10.773 回答
6

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

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

于 2010-12-20T18:57:57.367 回答
3

VB.NET 等价物是

   System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(senderX, certificate, chain, sslPolicyErrors)
                                                                             Return True
                                                                         End Function
于 2015-11-04T21:26:57.553 回答
2

这实际上更像是一个服务器故障问题,但我会在这里添加我可以添加的内容。

Windows 机器通常信任的根证书颁发机构列表会定期更新。这归结为 IE 的 Windows 更新。您可以查看MSDN 了解更多信息

如果您的客户没有打开 Windows 更新或主动忽略 Windows 更新,不幸的是,这对于许多 IT 部门来说很常见,那么除了切换 SSL 提供程序之外,您无能为力。

基本上,他们需要获取证书更新,或者您需要切换到很可能已经被相关机器信任的证书提供者。通常这意味着VerisignThawte。第三种选择是您一直在走的路线:让他们手动信任根 CA。

归根结底,我讨厌以这种方式更改应用程序的想法,仅仅是因为所涉及的 IT 部门是白痴,但真正的问题归结为您的公司希望如何处理这个问题。

于 2010-12-20T18:56:00.347 回答
2

当您在 Web 服务器上查看该证书的 Go Daddy 认证路径时,您看到的是 Go Daddy Class xxx 还是 Starfield Class xxx ?

从您的非旧版客户端(即 Windows Vista 以上)开始,Go Daddy 认证路径会显示什么?Go Daddy Class xxx 还是 Starfield Class xxx ?

这些收到警告的客户是旧客户吗?即 WinXP 和更早版本?

根证书更新的工作方式与 Windows Vista 不同。

http://support.microsoft.com/kb/931125

Windows Vista 及更高版本上的根证书通过自动根更新机制(即每个根证书)分发。当用户访问安全网站(通过使用 HTTPS SSL)、阅读安全电子邮件 (S/MIME) 或下载已签名的 ActiveX 控件(代码签名)并遇到新的根证书时,Windows 证书链验证软件检查根证书的 Microsoft 更新。如果找到它,它会下载当前的证书信任列表 (CTL),其中包含程序中所有受信任的根证书的列表,并验证根证书是否在其中列出;然后它将指定的根证书下载到系统并将其安装在 Windows 受信任的根证书颁发机构存储中。

您可能会发现 Web 服务器上的 Go Daddy 认证路径认为它是 Starfield Class 2 而不是 Go Daddy Class 2,因此您安装了错误的根证书。当您在 Web 服务器上查看时,我发现它没有显示根证书警告,下载并安装 Do Daddy 2 类根证书并删除 Starfield 证书,您的问题就会消失。

于 2012-02-13T01:57:20.340 回答