Web 服务及其客户端应用程序之间的通信经常带有安全性敏感信息,而这些信息可受益于安全套接字层 (SSL) 协议提供的数据完整性和保密性。
本模块描述了如何配置 ASP.NET Web 服务来要求客户端对所有通信使用 SSL,并说明了如何使用 HTTPS 协议从 ASP.NET 客户端应用程序调用 Web 服务。
注 本方法文档中的信息还适用于 ASP.NET 和 Microsoft Internet 信息服务 (IIS) 所宿主的远程对象(使用 .NET 远程技术)。有关如何创建 IIS 所宿主的远程组件,请参阅“How To Create a Remote Component Hosted by IIS”。
创建一个简单的 Web 服务
在此过程中,您将创建一个简单的用于测试目的的 Web 服务。
要在 Web 服务宿主计算机上创建一个简单的 Web 服务,请执行下列操作:
-
启动 Visual Studio .NET 并创建一个新的名为 SecureMath 的 Visual C# ASP.NET Web 服务应用程序。
-
将 service1.asmx 重命名为 math.asmx。
-
打开 math.asmx.cs 并将 Service1 类重命名为 math。
-
将下列 Web 方法添加到 math 类。
[WebMethod] public long Add(long operand1, long operand2) { return (operand1 + operand2); }
-
要创建 Web 服务,请单击 Build 菜单上的 Build Solution。
将 Web 服务虚拟目录配置为需要 SSL
您的 Web 服务在 Internet 信息服务 (IIS) 上运行并依赖于 IIS 来提供 SSL 支持。
此过程假定您在 Web 服务器上安装了有效的服务器证书。有关安装 Web 服务器证书的详细信息,请参阅“How To Set Up SSL on a Web Server”。
要使用 IIS 配置 Web 服务的虚拟目录来采用 SSL ,请执行下列操作:
-
在 Web 服务宿主计算机上,启动 IIS。
-
导航到 SecureMath 虚拟目录。
-
右键单击 SecureMath,然后单击 Properties。
-
单击 Directory Security 选项卡。
-
在 Secure communications 下,单击 Edit。
如果 Edit 不可用,最可能的原因是未安装 Web 服务器证书。
-
选择 Require secure channel (SSL) 复选框。
-
单击 OK,然后再次单击 OK。
-
在 Inheritance Overrides 对话框中,单击 Select All,然后单击 OK 关闭 SecureMath 属性对话框。
此操作将新的安全性设置应用到虚拟目录根下的所有子目录。
使用浏览器测试 Web 服务
此过程确保 Web 服务器证书是有效的,并已由受客户端计算机信任的证书颁发机构 (CA) 颁发。
要使用 SSL 从 Internet Explorer 调用 Web 服务,请执行下列操作:
-
启动客户端计算机上的 Internet Explorer 并浏览(使用 HTTPS)到 Web 服务。例如:
https://WebServer/SecureMath/math.asmx
浏览器应显示出Web 服务测试页。
-
如果成功显示了 Web 服务测试页,则关闭 Internet Explorer 并转到“开发一个 Web 应用程序来调用服务组件”这一过程。
-
如果显示 Security Alert 对话框(如图 1 所示),则单击 View Certificate 会看到颁发 Web 服务器证书的发证 CA 的标识。您必须在客户端计算机上安装 CA 的证书。“在客户端计算机上安装证书颁发机构的证书”这一过程中描述了这一内容。
-
关闭 Internet Explorer。
图 1. Security Alert 对话框
在客户端计算机上安装证书颁发机构的证书
此过程将发证 CA 的证书作为受信任的根证书颁发机构安装在客户端计算机上。客户端计算机为了在不显示 Security Alert 对话框的情况下接受服务器证书,必须信任发证 CA。
如果将 Microsoft 证书服务用作 Windows 域内的 CA
只有在 Web 服务器证书已由 Microsoft 证书服务 CA 颁发的情况下才执行此过程。否则,如果有 CA 的 .cer 文件,则转至步骤 8。
-
启动 Internet Explorer 并浏览到 http:// hostname/certsrv,其中 hostname 是颁发服务器证书的 Microsoft 证书服务所在计算机的名称。
-
单击 Retrieve the CA certificate or certificate revocation list,然后单击 Next。
-
单击 Install this CA certification path。
-
在 Root Certificate Store 对话框中,单击 Yes。
-
使用 HTTPS 浏览到 Web 服务。例如:
https://WebServer/SecureMath/math.asmx
现在 Web 服务测试页应由浏览器正确显示,而不显示 Security Alert 对话框。
您现在已在个人受信任的根证书存储中安装了 CA 的证书。要能成功地从 ASP.NET 页调用 Web 服务,必须将 CA 的证书添加到计算机的受信任的根存储中。
-
重复步骤 1 和 步骤 2,单击 Download CA certificate,然后将其保存到本地计算机上的文件中。
-
现在执行其余的步骤。
如果有 CA的 .cer 证书文件:
-
在任务栏上,单击 Start,然后单击 Run。
-
键入 mmc,然后单击 OK。
-
在 Console 菜单上,单击 Add/Remove Snap-in。
-
单击 Add。
-
选择 Certificates,然后单击 Add。
-
选择 Computer account,然后单击 Next。
-
选择 Local Computer: (the computer this console is running on),然后单击 Finish。
-
单击 Close,然后单击 OK。
-
在 MMC 管理单元的左侧窗格中展开 Certificates (Local Computer)。
-
展开 Trusted Root Certification Authorities。
-
右键单击 Certificates,指向 All Tasks,然后单击 Import。
-
单击 Next 跳过“证书导入向导”的 Welcome 对话框。
-
输入 CA 的 .cer 文件的路径和文件名。
-
单击 Next。
-
选择 Place all certificates in the following store,然后单击 Browse。
-
选择 Show physical stores。
-
展开列表内的 Trusted Root Certification Authorities,然后选择 Local Computer。
-
单击 OK,单击 Next,然后单击 Finish。
-
单击 OK 关闭确认消息框。
-
刷新 MMC 管理单元内的 B>Certificates 文件夹的视图,并确认是否已列出 CA 的证书。
-
关闭 MMC 管理单元。
开发一个 Web 应用程序来调用 Web 服务
此过程将创建一个简单的 ASP.NET Web 应用程序。并将此 ASP.NET Web 应用程序用作客户端应用程序来调用 Web 服务。
要创建一个简单的 ASP.NET Web 应用程序,请执行下列操作:
-
在 Web 服务客户端计算机上,创建一个新的名为 SecureMathClient 的 C# ASP.NET Web 应用程序。
-
添加一个对 Web 服务的 Web 引用(通过使用 HTTPS)。
-
右键单击解决方案资源管理器内的 References 节点,然后单击 Add Web Reference。
-
在 Add Web Reference 对话框中,输入 Web 服务的 URL。确保您使用一个 HTTPS URL。
注 如果您没有使用 HTTPS 而设置了一个对 Web 服务的 Web 引用,则可以手动编辑已生成的代理类文件,并将设置 Url 属性的代码行从 HTTP URL 更改为 HTTPS URL。
-
单击 Add Reference。
-
-
打开 WebForm1.aspx.cs 并将下列 using 语句添加到现有的 using 语句下。
using SecureMathClient.WebReference1;
-
在 Designer 模式下查看 WebForm1.aspx 并使用下列 ID 创建一个如图 2 所示的窗体:
-
operand1
-
operand2
-
result
-
add
图 2. WebForm1.aspx 窗体 -
-
双击 Add 按钮创建一个按钮单击事件处理程序。
-
将下列代码添加到事件处理程序中:
private void add_Click(object sender, System.EventArgs e) { math mathService = new math(); int addResult = (int) mathService.Add( Int32.Parse(operand1.Text), Int32.Parse(operand2.Text)); result.Text = addResult.ToString(); }
-
在 Build 菜单上,单击 Build Solution。
-
运行此应用程序。输入要做加法运算的两个数,然后单击 Add 按钮。
-
Web 应用程序将使用 SSL 调用 Web 服务。