本章
分布式应用程序通常要处理敏感数据。敏感数据可能包括用于身份验证的凭据或数据(例如信用卡号码或银行交易明细)。无论信息是在数据库里存储,还是在中间应用程序节点中通过网络传输的时,保持安全性都是很重要的。
中间Web应用程序节点中的安全通讯是一个彻底的安全系统的重要组成部分,而且当应用程序通过公网(象Internet)传递明感消息时,特别重要。
本章讨论了安全通讯的必要性,描述了在 ASP.NET Web 应用程序里可以利用的安全通讯技术。
目标
使用本章:
• | 学习为什么以及如何在分布式 .NET Web 应用程序的各个层面上进行安全的网络通信。 |
• | 理解三种实现安全通信的核心技术的目的、能力及其局限:SSL/TLS、IPSec 和RPC 加密。 |
• | 确定SSL/TLS、IPSec 和 RPC 加密中哪种方式最适合您的分布式 Web 应用程序的不同实体之间的安全通信。 |
适用于:
本章适用于以下的产品和技术:
• | Microsoft® Windows® XP 或者 Windows 2000 Server (service pack 3) 和以后的操作系统 |
• | Microsoft Internet Information Services (IIS) 5.0 和以后的版本 |
• | SQL Server™ 2000 ( service pack 2) 和以后的版本 |
如何使用本章
要学习本章:
• | 阅读“构建安全的 ASP.NET Web 应用程序简介”一章,定义了分布式 Web 应用程序安全通信的重要性。 | ||||||||
• | 阅读“ASP.NET 应用程序的安全模型”一章,提供了分布式 ASP.NET Web 程序创建过程中所运用的体系结构和技术概览,着重指出了这仪体系结构中适合使用认证、授权和安全通信的位置。 | ||||||||
• | 对本章讨论的安全通信技术的演示,请阅读下面章节:
|
本页内容
在您开始前 | |
了解要保护什么 | |
SSL/TLS | |
使用 SSL | |
IPSec | |
使用 IPSec | |
RPC 加密 | |
使用 RPC 加密 | |
点对点安全性 | |
在 IPSec 和 SSL 之间进行选择 | |
建立场和负载平衡 | |
小结 |
在您开始前
许多应用程序通过网络向终端用户并从终端用户以及在中间应用程序节点之间传递安全敏感数据。敏感数据可能包括用于身份验证的凭据或数据(例如信用卡号码或银行交易明细)。为了防止不必要的信息泄露以及保护数据在传输过程中免受非授权修改,通信终点之间的通道必须是安全的。
安全通信具有以下两个特点:
• | 保密性。保密是指确保数据处于私有和保密状态,并且不会被使用网络监控软件的窃听者查看到。通常借助加密来达到保密目的。 |
• | 完整性。安全的信道还必须确保数据在传输过程中免受意外或者故意(恶意)的修改。完整性通常是通过使用“消息身份验证代码 (MAC)”实现的。 |
本章包含以下安全通信技术:
• | 安全套接字层 / 传输层安全 (SSL/TLS)。这通常用于保护浏览器和 Web 服务器之间的通道安全。不过,它也可以用于保护从运行 Microsoft? SQL Server® 2000 的数据库服务器进出的Web 服务消息和通信的安全。 |
• | Internet 协议安全 (IPSec)。IPSec 提供传输级安全通信解决方案,可以用于保护两台计算机(例如,一台应用程序服务器和一台数据库服务器)之间传送的数据安全。 |
• | 远程过程调用 (RPC) 加密。分布式 COM (DCOM) 使用的 RPC 协议提供了一个身份验证级别(数据包保密性),它对客户端和服务器之间传送的每个数据包都进行加密。 |
了解要保护什么
当一个 Web 请求从您的应用程序的物理部署层传递时,它要经过许多信道。图1 显示了一个常用的 Web 应用程序部署模型。
图1典型的 Web 部署模型
在这个典型的部署模型中,一个请求要通过三个不同的通道。客户端到 Web 服务器的链接可能通过 Internet 或公司 Intranet 实现,通常是使用 HTTP。其余两个链接是在公司域的内部服务器之间进行的。虽然如此,以上三种链接的安全都令人担心。许多完全基于 Intranet 的应用程序在层间传输安全敏感数据;例如,处理敏感雇员数据的人力资源和工资单应用程序。
图2 显示了如何结合使用 SSL 加密、IPSec 加密和 RPC 加密来保护每一条通道。
图2能够安全通信的典型 Web 部署模型
技术的选择要根据许多因素,包括传输协议、端点技术和环境方面的考虑(例如硬件、操作系统版本、防火墙等等)。
SSL/TLS
SSL/TLS 用于在客户端和服务器之间建立加密信道。用于建立安全信道的握手机制有详细记录,详细信息可以在 Microsoft 知识库中的以下文章中找到 Microsoft Knowledge Base:
使用 SSL
当您使用 SSL 时,应该注意以下几点:
• | 应用 SSL 时,客户端使用 HTTPS 协议(并指定 https:// URL),服务器在 TCP 端口 443 上侦听。 |
• | 当启用 SSL 时,应该监视应用程序的性能。 SSL 使用复杂的加密功能对数据进行加密或解密,因此对应用程序的性能有影响。最大的性能冲击发生在初始握手中,因为这时使用的是不对称的公钥/私钥加密。在此之后(生成并交换了安全会话密钥后),将使用更快的对称加密来加密应用程序数据。 |
• | 您应当对使用 SSL 的页面进行优化,方法是使页面包含较少的文字和简单的图形。 |
• | 因为在建立会话过程中,与 SSL 相关的性能破坏最大,所以请确保您的连接不超时。 您可以通过增加 ServerCacheTime 注册表项的值来精确调整它。有关详细信息,请参见Microsoft 知识库文章中的Q247658,“HOW TO: Configure Secure Sockets Layer Server and Client Cache Elements”。 |
• | SSL 要求将服务器身份验证证书安装在 Web 服务器上(或数据库服务器上,如果您使用 SSL 与SQL Server 2000 通信)。有关安装服务器身份验证证书的详细信息,请参见本指南“参考”部分的“How To Set Up SSL on a Web Server(“如何在 Web 服务器上安装 SSL”)。” |
IPSec
IPSec 可以用于保护两台计算机(例如,一台应用程序服务器和一台数据库服务器)之间传送的数据安全。IPSec 对于应用程序是完全透明的,因为加密、完整性和身份验证服务是在传输级别上实现的。应用程序继续使用 TCP 端口和 UDP 端口以普通方式彼此通信。
使用 IPSec,您可以:
• | 通过加密两台计算机之间传送的所有数据来实现消息保密。 |
• | 在两台计算机之间实现消息完整性(无需加密数据)。 |
• | 在两台计算机(不是用户)之间提供相互身份验证。例如,可以建立只允许来自特定客户端计算机(如应用程序或 Web 服务器)的请求的策略,帮助保证数据库服务器的安全。 |
• | 限制哪些计算机可以彼此通信。也可以限制只与特定的 IP 协议和 TCP/UDP 端口通信。 |
注:IPSec 的目的不是取代应用程序级安全。今天,它用作深层防御机制或用于保护不安全的应用程序(而不必更改它们),以及用于保护非 TLS 协议不受网络线路的攻击。
使用 IPSec
当您使用 IPSec 时,应当了解以下信息:
• | IPSec 既可以用于身份验证,也可以用于加密。 | ||||
• | 没有供开发人员以程序方式控制设置的 IPSec API。IPSec 是通过本地安全策略 Microsoft 管理控制台 (MMC) 内的 IPSec 的管理单元进行完全控制和配置的。 | ||||
• | 在Microsoft Windows 2000 操作系统的 IPSec 并不能保护所有 IP 通信类型的安全。 具体说来,它不能用于保护广播通信、多路广播通信、Internet 密钥交换通信或 Kerberos(它已经是一个安全协议)通信。 有关详细信息,请参见Microsoft 知识库文章Q253169能够保护通信—和不能保护的通信—Be Secured by IPSec | ||||
• | 可以使用 IPSec 筛选器控制何时应用 IPSec。 要测试 IPSec 策略,请使用 IPSec 监视器。IPSec 监视器 (Ipsecmon.exe) 提供有关哪个 IPSec 策略是活动的以及计算机之间的安全通道是否已经建立的信息。 有关详细信息,请参见下列知识库文章:
| ||||
• | 要建立两个服务器之间的信任,可以使用具有相互身份验证的 IPSec。这种方法使用证书来验证两台计算机的身份。 有关的详细信息,请参见下列知识库文章:
| ||||
• | 如果您需要使用 IPSec 来保护两台被防火墙隔开的计算机的通信安全,请确保防火墙没有使用“网络地址转换 (NAT)”。IPSec 不能在任何基于 NAT 的设备上运行。 有关详细信息和配置步骤,请参见Q233256,“HOW TO Enable IPSec Traffic through a Firewall” Microsoft 知识库文章 “How To Use IPSec to Provide Secure Communication between Two Servers。” |
RPC 加密
RPC 是 DCOM 使用的基本传输装置机制。RPC 提供一套可配置的身份验证级别,包括从无身份验证(和无数据保护)到参数状态的完全加密。
最安全的级别(RPC 数据包保密性)为每一个远程过程调用(和由此产生的每一个 DCOM 方法调用)加密参数状态。RPC 加密级别(40 位或 128 位)取决于客户端和服务器上运行的 Windows 操作系统的版本。
使用 RPC 加密
最可能需要使用 RPC 加密的情况是:当您的基于 Web 的应用程序与远程计算机上的服务组件(在 Enterprise Services 服务器应用程序内)通信时。
在这种情况下,要使用 RPC 数据包保密性身份验证(和加密),必须对客户端和服务器都进行配置。在客户端和服务器之间会发生高水印协商过程,这确保了使用两者(客户端和服务器)中更高的设置。
通过在服务组件程序集中使用 .NET 属性,或者通过在部署时使用“组件服务”管理工具,可以在 (Enterprise Services) 应用程序级定义服务器设置。
如果客户端是 ASP.NET Web 应用程序或 Web 服务,将使用 Machine.config 中 元素的 comAuthenticationLevel属性<processModel>在 Machine.config.中的元素,这为 Web 服务器上运行的所有 ASP.NET 应用程序提供默认身份验证级别。
更多信息
有关 RPC 身份验证级别协商和服务组件配置的详细信息,请参见本章,“Enterprise Services Security。”
点对点安全性
点对点通信方案大致可以分为以下主题:
• | 浏览器到 Web 服务器 |
• | Web 服务器到远程应用程序服务器 |
• | 应用程序服务器到数据库服务器 |
浏览器到 Web 服务器
要保护在浏览器和 Web 服务器之间传送的敏感数据的安全,请使用 SSL。在下列情况中,您需要使用 SSL:
• | 您使用“表单”身份验证,需要保护从登录表单提交给 Web 服务器的明文凭据。 在这种情况下,您应该使用 SSL 保护对所有页面(不仅仅是登录页面)的访问,确保在初始身份验证过程中生成的身份验证 Cookie 在客户端浏览器与应用程序会话的整个过程中保持安全。 |
• | 您使用“基本”身份验证,需要保护(Base64 编码的)明文凭据。 当“基本”身份验证在应用程序的请求(不仅仅是初始请求)下向 Web 服务器传送明文凭据时,您应该使用 SSL 确保对所有页面(不仅仅是初始登录页)的访问安全。 注:Base64 用于将二进制数据编码为可打印的 ASCII 文本。与加密不同的是,它不提供消息的完整性和保密性。 |
• | 您的应用程序在浏览器和 Web 服务器之间传递敏感数据(或相反);例如,信用卡号码或银行帐户明细。 |
Web 服务器到远程应用程序服务器
应当使用 IPSec 加密、SSL 加密或 RPC 加密来保护 Web 服务器和远程应用程序服务器之间的传输通道。选择取决于传输协议、环境因素(操作系统版本、防火墙等等)。
• | 企业服务如果您的远程服务器是一个或多个服务组件(在一个 Enterprise Services 服务器应用程序上)的宿主,并且您直接与它们通信(因此使用 DCOM),请使用 RPC 数据包保密性加密。 有关如何在 Web 应用程序和远程服务组件之间配置 RPC 加密的详细信息,请参见本章“Enterprise Services Security”。 |
• | Web 服务如果您的远程服务器是 Web 服务的宿主,您可以在 IPSec 和 SSL 之间进行选择。 因为 Web 服务已经使用了 HTTP 传输,所以通常您应当使用 SSL。SSL 也允许您仅对从 Web 服务(而不是这两台计算机之间传送的所有通信)传入和传出的数据进行加密。IPSec 则使两台计算机之间传送的所有通信都加密。 注:消息级安全(包括数据加密)由“全球 XML Web 服务体系结构 (GXA)”倡议(具体就是 WS 安全规范)解决。Microsoft 提供 Web 服务开发工具包,允许您开发消息级安全解决方案。这可以从http://msdn.microsoft.com/webservices/building/wsdk/下载。 |
• | NET 组件(使用 .NET 远程处理).如果您的远程服务器是一个或多个 .NET 组件的宿主并且通过 TCP 通道与它们连接,可以使用 IPSec 来提供安全的通信链路。如果您是 ASP.NET 内宿主 .NET 组件,可以使用 SSL(使用 IIS 配置的)。 |
应用程序服务器到数据库服务器
要保护在应用程序服务器和数据库服务器之间传送的数据,可以使用 IPSecure。如果您的数据库服务器运行 SQL Server 2000 并且应用程序服务器上安装了 SQL Server 2000 网络库,则可以使用 SSL。后一种选择要求在数据库服务器的计算机存储中安装服务器身份验证证书。
在下列情况中,您可能需要保护数据库服务器链接:
• | 您连接到数据库服务器,并且没有使用 Windows 身份验证。例如,您可能对 SQL Server 使用的是 SQL 身份验证,或者您可能连接到非 SQL Server 数据库。在这些情况中,凭据以明文传递,因此安全是一个非常重要的问题。 注 对 SQL Server 使用 Windows 身份验证的一个主要优点是它意味着凭据不再通过网络传递有关 Windows 和 SQL 身份验证的详细信息,请参见本章“数据访问安全”。 |
• | 您的应用程序可能向数据库提交或从数据库检索敏感数据(例如,工资数据)。 |
使用 SSL 到 SQL Serve
如果使用 SSL 保护 SQL Server 数据库通道,请考虑以下几点:
• | 为使 SSL 生效,必须在数据库服务器上的计算机存储中安装服务器身份验证证书。客户端计算机上也必须有一个由颁发服务器证书的同一(或受信任的)颁发机构颁发的根“证书颁发机构”证书。 | ||||
• | 客户端必须已经安装了 SQL Server 2000 连接库。早期版本或通用库将无法运行。 | ||||
• | SSL 只能对 TCP/IP(SQL Server 的推荐通信协议)和命名管道起作用。 | ||||
• | 您可以将服务器配置成对所有连接(来自所有客户端)强制使用加密。 | ||||
• | 在客户端,您可以:
| ||||
• | 与 IPSec 不同,如果客户端或服务器 IP 地址发生更改,并不要求配置更改。 |
更多信息
有关对 SQL Server 使用 SSL 的详细信息,请参见以下资源:
• | "How To Use SSL to Secure Communication with SQL Server 2000." |
• | Webcast: "Microsoft SQL Server 2000: How to Configure SSL Encryption (April 23, 2002)" |
在 IPSec 和 SSL 之间进行选择
在 IPSec 和 SSL 之间进行选择时,请考虑以下几点:
• | IPSec 可以用于保护计算机间的所有 IP 通信;而 SSL 特定于个别的应用程序。 |
• | IPSec 是计算机范围的设置,不支持特定网络连接的加密。但是,站点可以划分为使用或不使用 SSL。另外,当您使用 SSL 连接到 SQL Server 时,可以基于每个连接(从客户端应用程序)选择是否使用 SSL。 |
• | IPSec 对于应用程序是透明的,因此它可以用于在 IP 之上运行的安全协议,例如 HTTP、FTP 和 SMTP。而 SSL/TLS 与应用程序是密切相关的。 |
• | 除了加密之外,IPSec 还可以用于计算机的身份验证。这对于受信任的子系统方案尤其重要,在此方案中,数据库授权来自特定应用程序(在特定的计算机上运行)的固定身份。 IPSec 可用于确保只有特定的应用程序服务器可以连接到数据库服务器,以防止来自其它计算机的攻击。 |
• | IPSec 要求两台计算机都运行 Windows 2000 或更高版本。 |
• | SSL 可以通过基于 NAT 的防火墙工作,而 IPSec 不能。 |
建立场和负载平衡
如果您在多个虚拟 Web 站点中使用 SSL,您需要使用唯一的 IP 地址或唯一的端口号。不能在多个站点上使用相同的 IP 地址和端口号。如果 IP 地址与负载平衡器中的服务器相似性设置结合使用,效果更好。
更多信息
有关详细信息,请参见Microsoft 知识库中的 Q187504,“HTTP 1.1 Host Headers Are Not Supported When You Use SSL”。
小结
本章描述了如何结合使用 SSL 加密、IPSec 加密和 RPC 加密,为您的分布式应用程序提供端到端安全通信解决方案。概括起来:
• | 通道安全关心的是通过 Internet 和公司 Intranet 传递的数据的安全。 |
• | 考虑 Web 浏览器到 Web 服务器、Web 服务器到应用程序服务器和应用程序服务器到数据库服务器链接的安全要求。 |
• | 安全通信提供保密性和完整性。它不保护您不被拒绝(有关此用途,请参见客户端证书)。 |
• | 通道安全选项包括 SSL 加密、IPSec 加密和 RPC 加密。当您的应用程序使用 DCOM 与远程服务组件通信时,适合使用后一种选择。 |
• | 如果您使用 SSL 与 SQL Server 通信,应用程序可以基于每个连接选择是否对连接加密。 |
• | 对两台计算机之间传递的所有 IP 通信都进行加密。 |
• | 安全机制的选择取决于传输协议、操作系统版本和网络因素(包括防火墙)。 |
• | 在安全通信与性能之间总要权衡利弊。请选择适合您的应用程序要求的安全级别。 |