如何使用 SSL 调用 Web 服务
更新日期: 2004年04月20日
本页内容
目标
本章的目标是:
| • | 配置 ASP.NET Web 服务,要求所有客户端通信都使用 SSL。 |
| • | 配置客户端计算机,使其信任为 Web 服务器颁发 SSL 证书的证书颁发机构 (CA)。 |
| • | 使用 HTTPS 安全调用 ASP.NET Web 服务。 |
适用范围
本章适用于以下产品和技术:
| • | Microsoft Windows® XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的操作系统 |
| • | Microsoft Internet 信息服务 (IIS) 5.0 |
| • | Microsoft .NET Framework 版本 1.0 (Service Pack 2) 以及更高版本 |
| • | Microsoft Visual C#® .NET |
如何使用本章内容
若要学好本章内容:
| • | 您必须具有使用 Visual C# .NET 和 Microsoft Visual Studio® .NET 的经验。 |
| • | 您必须具有使用 ASP.NET 开发 Web 应用程序的经验。 |
| • | 您必须具有配置 IIS 的经验。 |
| • | 阅读第 4 章安全通信。其中介绍了 SSL 及其最常见的用途。 |
| • | 您必须具有一台安装了 SSL 证书的 Web 服务器。有关详细信息,请参见如何在 Web 服务器上设置 SSL。 |
| • | 您的客户端计算机必须已经信任为您的服务器颁发 SSL 证书的证书颁发机构;或者,您必须能够得到该机构颁发的证书,以便您按照本章中所述的过程来信任该机构。 |
摘要
Web 服务与其客户端应用程序之间进行通信时,通常会携带一些机密信息,它们可利用安全套接字层 (SSL) 协议所带来的数据完整性和保密性。
本章介绍如何配置 ASP.NET Web 服务,从而要求客户端在所有的通信中都使用 SSL。此外,本章还展示了如何使用 HTTPS 协议从 ASP.NET 客户端应用程序调用该 Web 服务。
注意:本文中的信息还适用于由 ASP.NET 和 Microsoft® Internet 信息服务 (IIS) 承载(使用 .NET Remoting 技术)的远程对象。有关如何创建由 IIS 承载的远程组件的信息,请参见如何创建由 IIS 承载的远程组件。
创建一个简单的 Web 服务
您将在此过程中创建一个简单的 Web 服务,供测试之用。
| • | 在 Web 服务主机上创建一个简单的 Web 服务 1. | 启动 Visual Studio .NET,创建一个新的名为 SecureMath 的 Visual C# ASP.NET Web 服务应用程序。 | 2. | 将 service1.asmx 重命名为 math.asmx。 | 3. | 打开 math.asmx.cs 并将 Service1 类重命名为 math。 | 4. | 将下面的 Web 方法添加到 math 类。 [WebMethod]
public long Add(long operand1, long operand2)
{
return (operand1 + operand2);
}
| 5. | 要创建 Web 服务,在“生成”菜单上单击“生成解决方案”。 |
|
将 Web 服务虚拟目录配置为需要 SSL
您的 Web 服务在 Internet 信息服务 (IIS) 上运行并依赖 IIS 提供 SSL 支持。
此过程假设您在 Web 服务器上安装了有效的服务器证书。有关安装 Web 服务器证书的详细信息,请参见如何在 Web 服务器上设置 SSL。
| • | 使用 IIS 配置 Web 服务的虚拟目录以使用 SSL 1. | 在 Web 服务主机上,启动 IIS。 | 2. | 导航到 SecureMath 虚拟目录。 | 3. | 右键单击 SecureMath,然后单击“属性”。 | 4. | 单击“目录安全性”选项卡。 | 5. | 单击“安全通信”下的“编辑”。
如果无法使用“编辑”,则可能没有安装 Web 服务器证书。 | 6. | 选择“要求安全通道 (SSL)”复选框。 | 7. | 单击“确定”,然后再次单击“确定”。 | 8. | 在“继承覆盖”对话框中,单击“全选”,然后单击“确定”以关闭 SecureMath 属性对话框。
这会将新的安全设置应用于虚拟根目录下的所有子目录。 |
|
使用浏览器测试 Web 服务
此过程确保 Web 服务器证书是有效的,而且已经由客户端计算机所信任的证书颁发机构 (CA) 颁发。
| • | 使用 SSL 从 Internet Explorer 调用 Web 服务 1. | 在客户端计算机上启动 Internet Explorer 并(使用 HTTPS)浏览到 Web 服务。例如: https://WebServer/securemath/math.asmx
浏览器应该显示 Web 服务测试页。 | 2. | 如果成功显示了 Web 服务测试页,就关闭 Internet Explorer 并转到过程“开发一个 Web 应用程序以调用服务组件”。 | 3. | 如果显示的是“安全警报”对话框(如图 1 所示),单击“查看证书”查看颁发 Web 服务器证书的 CA 的身份。您必须在客户端计算机上安装该 CA 的证书。过程“在客户端计算机上安装证书颁发机构的证书”对此进行了说明。 | 4. | 关闭 Internet Explorer。 |
|

图 1
“安全警报”对话框
在客户端计算机上安装证书颁发机构的证书
此过程在客户端计算机上安装 CA 所颁发的证书,并将该 CA 作为受信任的根证书颁发机构。客户端计算机必须信任该颁发证书的 CA,以便接受服务器证书,但不显示“安全警报”对话框。
| • | 如果在 Windows 域中使用 Microsoft 证书服务作为 CA 1. | 仅在您的 Web 服务器证书是由 Microsoft 证书服务 CA 颁发的情况下,才需执行此过程。否则,如果您有 CA 的 .cer 文件,请转到第 8 步。 | 2. | 启动 Internet Explorer 并浏览到 http://hostname/certsrv,其中 hostname 是颁发服务器证书的 Microsoft 证书服务所在计算机的名称。 | 3. | 单击“检索 CA 证书或证书吊销列表”,然后单击“下一步”。 | 4. | 单击“安装此 CA 证书路径”。 | 5. | 在“根证书存储”对话框中,单击“是”。 | 6. | 使用 HTTPS 浏览到 Web 服务。例如: https://WebServer/securemath/math.asmx
浏览器中现在应该正确显示 Web 服务测试页,而不显示“安全警报”对话框。 现在您已经在个人受信任根证书存储中安装了 CA 的证书。您必须将 CA 的证书添加到计算机的受信任根存储中,然后才能够从 ASP.NET 页成功调用 Web 服务。 | 7. | 重复第 1 步和第 2 步,单击“下载 CA 证书”,然后将其保存到本地计算机上的某个文件中。 | 8. | 现在执行其余步骤。 如果有 CA 的 .cer 证书文件 | 9. | 在任务栏上,单击“开始”,然后单击“运行”。 | 10. | 键入“mmc”,然后单击“确定”。 | 11. | 在“控制台”菜单上,单击“添加/删除管理单元”。 | 12. | 单击“添加”。 | 13. | 选择“证书”,然后单击“添加”。 | 14. | 选择“计算机帐户”,然后单击“下一步”。 | 15. | 选择“本地计算机 (运行这个控制台的计算机):”,然后单击“完成”。 | 16. | 单击“关闭”,然后单击“确定”。 | 17. | 在 MMC 管理单元的左窗格中展开“证书 (本地计算机)”。 | 18. | 展开“受信任的根证书颁发机构”。 | 19. | 右键单击“证书”,指向“所有任务”,然后单击“导入”。 | 20. | 单击“下一步”跳过“证书导入向导”的“欢迎”对话框。 | 21. | 输入 CA 的 .cer 文件的路径和文件名。 | 22. | 单击“下一步”。 | 23. | 选择“将所有的证书放入下列存储区”,然后单击“浏览”。 | 24. | 选择“显示物理存储区”。 | 25. | 在列表中展开“受信任的根证书颁发机构”,然后选择“本地计算机”。 | 26. | 依次单击“确定”、“下一步”以及“完成”。 | 27. | 单击“确定”关闭确认消息框。 | 28. | 在 MMC 管理单元中刷新“证书”文件夹的视图,确认该 CA 的证书已列出。 | 29. | 关闭 MMC 管理单元。 |
|
开发一个 Web 应用程序以调用 Web 服务
本过程创建一个简单的 ASP.NET Web 应用程序。您将使用此 ASP.NET Web 应用程序作为客户端应用程序来调用 Web 服务。
| • | 创建一个简单的 ASP.NET Web 应用程序 1. | 在 Web 服务客户端计算机上,创建一个新的名为 SecureMathClient 的 C# ASP.NET Web 应用程序。
| 2. | (使用 HTTPS)添加对 Web 服务的 Web 引用。 1. | 右键单击解决方案资源管理器中的“引用”节点,然后单击“添加 Web 引用”。
| 2. | 在“添加 Web 引用”对话框中,输入 Web 服务的 URL。确保使用 HTTPS URL。 注意:如果您已经设置了对 Web 服务的 Web 引用但没有使用 HTTPS,您可以手动编辑生成的代理类文件并更改代码行,将 Url 属性的设置从 HTTP URL 更改为 HTTPS URL。 | 3. | 单击“添加引用”。 |
| 3. | 打开 WebForm1.aspx.cs 并在现有 using 语句之下添加下面的 using 语句。 using SecureMathClient.WebReference1; | 4. | 在“设计器”模式下查看 WebForm1.aspx,并使用以下 ID 创建一个与图 2 类似的窗体: | • | operand1 | | • | operand2 | | • | result | | • | add |
 图 2 WebForm1.aspx 窗体 | 5. | 双击“Add”按钮,创建一个按钮单击事件处理程序。 | 6. | 将下面的代码添加到该事件处理程序中。 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();
}
| 7. | 在“生成”菜单上,单击“生成解决方案”。 | 8. | 运行该应用程序。输入要相加的两个数,然后单击“Add”按钮。该 Web 应用程序将使用 SSL 调用 Web 服务。 |
|
其他资源
| • | 如何创建由 IIS 承载的远程组件 |
| • | 如何在 Web 服务器上设置 SSL |
| • | 如何使用客户端证书调用 Web 服务 |