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.Net
Imports System.Security.Cryptography.X509Certificates
Public 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 Function
End 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) 的网站:
http://msdn2.microsoft.com/en-us/library/aa302384.aspx
有关配置 ASP.NET 和 IIS 以使用 SSL 的其他信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn2.microsoft.com/en-us/library/aa302411.aspx
有关如何添加和移除 Web 引用的其他信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn2.microsoft.com/en-us/library/d9w023sx(vs.71).aspx

属性

文章编号: 823177 - 最后修改: 2007年3月22日 - 修订: 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
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 823177
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com