本文描述了如何调用一个配置为需要 Web 应用程序颁发客户端证书的 Web 服务。
预备知识
在使用客户端证书时,您的应用程序还可从创建客户端应用程序和 Web 服务之间的安全信道(使用安全套接字层 [SSL])中获益。这使您能够安全地将保密信息发送给 Web 服务,或从 Web 服务送回。SSL 确保了消息的完整性和保密性。
注 本文中的信息还适用于 ASP.NET 和 IIS 宿主的远程组件。
为什么使用服务组件?
本文中提供的解决方案使用了一个服务组件,该服务组件配置为使用自定义服务帐户在 Enterprise Services 服务器应用程序中运行。ASP.NET Web 应用程序调用服务组件,这会导致对 Web 服务的调用(传递一个客户端证书)。此解决方案的配置如图 1 所示。

图 1. ASP.NET 调用一个服务组件来调用 Web 服务
这种安排确保了系统在与 Web 服务通信时有权访问用户配置文件。最初的 SSL 握手需要这种方式。
注 用于运行 Web 应用程序的 ASPNET 帐户具有“拒绝交互登录”特权,从而禁止使用此帐户进行交互式登录。因此,此帐户没有用户配置文件。不要向 ASPNET 帐户(或用于运行 Web 应用程序的任何帐户)授予交互登录功能。在配置帐户来运行 Web 应用程序时,应始终遵循最小特权原则,尽可能少地向帐户授予特权。
为什么需要用户配置文件?
在您申请使用需要客户端证书的 Web 服务时,客户端和服务器之间会发生 SSL 握手。要交换的一些组件有服务器证书、客户端证书以及由客户端生成的“预主机密 (pre-master secret)”。稍后在协议中使用此机密来生成“主机密 (master secret)”。
为了让服务器验证证书的提交者是否确实是私钥的持有者,客户端必须使用私钥加密预主机密,并将已加密的预主机密发送给服务器。为了使系统获得客户端的私钥来对预主机密进行签名,系统必须从客户端的密钥存储区中获得私钥。密钥存储区位于客户端的配置文件中,必须加载此配置文件。
注 在本模块中,Web 服务计算机(它宿主 Web服务)被命名为“WSServer”,Web 服务客户端计算机(它宿主 ASP.NET Web 应用程序和服务组件)被命名为“WSClient”。
