你目前正处于脱机状态,正在等待 Internet 重新连接

PRB:"System.Net.WebException。基础连接已关闭。可能未建立与远程服务器的信任关系"。当您升级.net 框架时出现错误信息

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 823177
症状
Service Pack 2 或您在安装 Microsoft.net Framework 1.0 版升级到.net Framework 版本 1.1 从.net Framework 版本 1.0,您的 Web 服务客户端可能会收到以下错误消息上的调用 Web 服务。当您使用安全套接字层 (SSL) 时,会发生此错误消息。

System.Net.WebException 的基础连接已关闭。不能建立与远程服务器的信任关系。

安装后,或即使该代码按预期方式在工作在升级后,可能会出现错误消息。
原因
从.net Framework 1.0 版开始 Service Pack 2 和 $ 使用在.net Framework 1.1 版及更高版本,在 HTTP 请求使用的名称必须匹配与 SSL 证书颁发的服务器的名称。在某些情况下,较早的 SSL 证书可能不再被接受。此外,证书吊销列表 (CRL) 现在检查,以确保该证书未被吊销。

此外存在其他方案。例如对于某些网络使用不同的名称解析方案的内部与外部客户端。在颁发证书给服务器与一个公用 URL (例如 www.adatum.com) 和 intranet 应用程序的情况下,内部域名系统 (DNS) 服务器提供了不同 (例如 www.internal.corporate.adatum.com) 在同一服务器的名称。 通过 SSL 此 Web 服务的请求可能会失败。此更改增强的 Web 服务使用 SSL 的安全性。

注意示例公司、 组织、 产品、 域名、 电子邮件地址、 徽标、 人员、 位置和此处所描述的事件均属虚构。 与任何真实的公司、 组织、 产品、 域名、 电子邮件地址、 徽标、 人员、 位置或事件没有意指,也必须进行这方面的推断。
解决方案
您可以通过使用下列方法之一解决此问题:
  • 您可以更改该名称解析方案,以便 DNS 提供了一个服务器相同的名称。相同名称的服务器必须能用于是否服务器称为从公司中或从公司外部。

    例如对于假定 URL www.adatum.com 来颁发的证书。通过使用外部 DNS 解析架构 (www.adatum.com) 调用任何从引用在组织外部的 Web 服务应用程序。当内部网 Web 服务应用程序称为内部 DNS 会将该网站的名称转换为 www.internal.corporate.adatum.com。因此,任何请求 web SSL 上的服务可能会失败,除非您更改该名称解析方案。
  • 当您添加到网站中 Web 服务客户端服务必须与该证书颁发给的名称相同的名称的 Web 引用时,将使用的主机名。
替代方法
若要变通解决此问题,您可以实现 ICertificatePolicy。然后您必须将 ICertificatePolicy 传递给 ServicePointManager.CertificatePolicy 之前进行 Web 服务方法调用。

下面的代码示例是在客户端应用程序中实现的。该代码强制客户端应用程序接受服务器提供的每个证书。此方法 weakens 应用程序的安全性,因为服务器的身份验证会跳过。要安全地解决此问题,请确保允许进行连接继续之前,服务器的证书都将包含所需的名称。

下面的代码示例实现 ICertificatePolicy,然后接受 SSL 下的每个请求:

Microsoft Visual.net Basic

导入在下面的两个命名空间,然后实现类:
Imports System.NetImports System.Security.Cryptography.X509CertificatesPublic Class MyPolicy  Implements ICertificatePolicy  Public Function CheckValidationResult(ByVal srvPoint As ServicePoint, _                ByVal cert As X509Certificate, ByVal request As WebRequest, _                ByVal certificateProblem As Integer) _            As Boolean Implements ICertificatePolicy.CheckValidationResult    'Return True to force the certificate to be accepted.    Return True  End FunctionEnd Class
Microsoft Visual C#.net

导入在下面的两个命名空间,然后实现类:
using System.Net;using System.Security.Cryptography.X509Certificates;public class MyPolicy : ICertificatePolicy {    public bool CheckValidationResult(          ServicePoint srvPoint        , X509Certificate certificate        , WebRequest request        , int certificateProblem) {        //Return True to force the certificate to be accepted.        return true;    } // end CheckValidationResult} // class MyPolicy
客户端代码中包括下面的代码。从客户端代码中调用该 Web 服务方法之前,必须执行下面的语句 (在 Visual Basic.net 或根据 Visual C#.net,):

Visual.net Basic
System.Net.ServicePointManager.CertificatePolicy = New MyPolicy()
visual C#.net
System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
状态
此行为是设计使然。
更多信息

重现问题的步骤

  1. 创建服务器证书。将服务器证书分配给名为 TestComputer 的计算机。您在创建服务器证书时确保 TestComputer 不是 公用名称 字段中键入的名称。
  2. 添加证书颁发机构的证书到 受信任的根证书颁发机构 的列表如果证书 self-issued (不是受信任的证书颁发机构颁发)。

    注意它并不能有效地将该网站添加到 可信站点 区域,在 Microsoft Internet Explorer 中的 安全 选项卡上。
  3. 若要将用于证书颁发机构的证书,请按照下列步骤操作:
    1. 启动 Internet Explorer。 在 工具 菜单上单击 Internet 选项
    2. 单击 内容 选项卡,然后单击 证书
    3. 单击在 受信任根证书颁发机构 选项卡。
    4. 单击 导入,然后单击 下一步
    5. 将移动到证书颁发机构的证书文件,单击 浏览,然后单击 下一步
    6. 单击 将所有的证书放入下列存储,然后单击 浏览
    7. 单击 受信任根证书颁发机构、 单击 确定,单击 下一步,然后单击 完成

      此时将显示一条消息,指示导入不成功。
    8. 单击 关闭,然后单击 确定
  4. 创建一个名为 WebService1 Microsoft ASP.NET Web 服务应用程序。取消对该 HelloWorld WebMethod WebService1 中的注释。
  5. 启用 SSL WebService1 应用程序。
  6. 创建名为 WebApplication1 的 ASP.NET Web 应用程序。名称在 BUTTON 控制 Button1
  7. 将 Web 引用添加到 WebService1 WebApplication1 中。
  8. 在 Button1 OnClick 事件中调用 HelloWorld WebMethod 的 WebService1。
  9. 在 WebApplication1,单击 Button1

    您可以看到 Button1 在浏览器中,并且您收到"症状"部分中提到的错误消息。
参考
有关 ASP.NET 安全增强功能和 SSL 的其他信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:有关配置 ASP.NET 和 IIS 以使用 SSL 的其他信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:有关如何添加和移除 Web 引用的其他信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:

警告:本文已自动翻译

属性

文章 ID:823177 - 上次审阅时间:03/22/2007 11:28:33 - 修订版本: 4.5

Microsoft ASP.NET 1.0, Microsoft Common Language Runtime (included with the .NET Framework 1.1), Microsoft Common Language Runtime (included with the .NET Framework) 1.0, Microsoft ASP.NET 1.1, Microsoft Web Services (included with the .NET Framework) 1.0

  • kbmt kbprb kberrmsg kbwebservices kbdev kbcertservices kbsecurity KB823177 KbMtzh
反馈