使用身份验证证书通过 Windows 窗体应用程序连接到 Web 服务






3.56/5 (18投票s)
如何使用证书连接到 SSL 通道并使用 Web 服务。
引言
本文解释了如何使用证书连接到例如 Web 服务。您是否知道一些银行和 IT 公司提供给员工或客户的软盘或 USB 盘,允许他们通过互联网连接到服务,使用安全文件和通道?好吧,我们将在本文中学习如何使用类似的文件,本文分为六个部分。
- 环境准备
- 服务器证书请求
- 生成证书
- 在 IIS Web 服务器上激活 SSL 安全通道通信
- 请求并获取用户证书
- 在 Windows 窗体中使用证书
在本文中,我使用了三台不同的机器
- 一台带有证书颁发机构的 Windows 2000 服务器
- 两台 Windows XP Professional Edition 机器,其中一台带有 IIS Web 服务器
您可以使用一台 Windows XP Professional 机器;我使用第二台机器是为了确保证书文件和我开发的软件是我连接到 Web 服务所需的唯一两样东西。祝您好运!
环境准备
在本节中,我们创建将用于尝试我们的证书程序的两个项目。我不会详细解释这两个项目;我假设您足够专业,可以从 Visual Studio 2005 创建两个标准项目。
好的,开始创建一个新的网站项目。选择 ASP.NET Web 服务模板。注意!重要的是您要使用真实的 Web 服务器而不是模拟器。因此,如果您没有安装 IIS Web 服务器或类似的服务器,请先安装它,然后从 VS 项目的组合框位置选择 HTTP
选项。对于应用程序名称,我选择了 http:///WebServSSL
。Visual Studio 会处理您需要的大部分内容;您只需要适当配置网站即可。如果您构建项目,服务中只会有一个方法,经典的“hello word”示例。我建议我们使用它进行测试,但如果您不喜欢,可以创建另一个您喜欢的函数。您现在必须创建的第二个项目是 Windows 应用程序。在同一个解决方案中创建 Web 服务;我将我的命名为 testSSLWebServ
。在新项目中,从解决方案资源管理器添加一个 Web 引用,并选择您的 Web 服务。我将服务的命名空间命名为 remoteWebServSSL
。好了,最后一步是在窗体上添加一个按钮,并调用 Web 服务的唯一方法。这里是一些代码。
remoteWebServSSL.Service srv = new remoteWebServSSL.Service();
MessageBox.Show("The Web Service say: " + srv.HelloWorld());
重要提示:防火墙设置可能会导致一些问题。确保关闭防火墙;您可以稍后进行配置。
现在我们可以开始。
服务器证书请求
接下来,要激活我们网站上的安全通道,我们必须转到根 Web 服务器的属性并设置服务器证书。有多种方法可以做到这一点;您可以选择您喜欢的方式。我选择连接到 CA Web 服务器来请求证书。因此,我必须创建一个证书请求,然后再次向 CA 请求。点击服务器证书按钮。然后会出现证书向导,点击下一步。在此对话框中,选择创建新证书,然后点击下一步。现在您唯一可以选择的选项是“现在准备请求,稍后发送”;再次点击下一步。在此窗体中,您必须选择将安装在 Web 服务器上的证书的名称。保留其他参数不变,继续。现在填写组织和组织单位的信息。继续。下一步很重要:所需的通用名称是您的机器名称,因此是响应您 Web 服务器的 Web 服务器的名称。例如,我的机器名称是 WorkStatio23
,我在浏览 Web 服务器时输入的 HTTP 地址是 http://WorkStatio23/WebServSSL
。我必须选择的通用名称是 WorkStatio23
。同时插入州/省和市/地区的详细信息,然后继续。最后一步,保存您的证书请求;选择一个位置,然后点击下一步。阅读请求文件摘要,点击下一步并完成。证书请求现在已创建。
生成证书
打开您计算机上生成的文本文件,从您选择保存它的目录中打开。选择文件中的所有文本并复制。现在该使用带有 CA 的 Windows 2000 Server 了。确保您的 CA 已配置为接受 Web 服务器的请求,并且它会立即颁发证书,无需用户参与。使用相关地址连接到 CA Web 服务器。例如,我的 Windows 2000 Server 机器名为 w2ksrw
。因此,请求认证的地址是 http://w2ksrw/CertSrv
。接下来,选择第二个选项“请求证书”,然后点击下一步。选择“高级请求”选项,然后再次点击下一步。选择第二个可用选项:“提交使用 base64 编码的 PKCS #10 文件进行的证书请求或使用 base64 编码的 PKCS #7 文件进行的续订请求。”点击下一步。由于我们将文本文件代码复制到了内存中,只需将其粘贴到相关的文本框控件(第一个)中,然后点击下一步。现在您已准备好下载证书。在结果页面上下载两个证书:“下载 CA 证书”和“下载 CA 证书链”。
在 IIS Web 服务器上激活 SSL 安全通道通信
选择扩展名为 .p7b 的证书文件。对我来说,它是 certnew.p7b。找到文件后双击它。请注意,证书无效。点击“安装证书”按钮,然后点击下一步直到完成;确认最后一条消息,证书现已安装。现在完成 Web 服务器上的 SSL 通道激活。启动您的 IIS 配置工具,转到根 Web 服务器(默认网站),右键单击并选择属性。返回目录安全性,然后再次点击服务器证书按钮。点击下一步。请注意,选项已更改。选择“处理待处理的请求并安装证书”选项,然后点击下一步。浏览您从 CA 获取的另一个证书。点击两次下一步,然后完成。好了,您已准备好使用 https 连接了。尝试使用 https 连接您的 Web 服务器并享受。在此示例中,我们必须强制我们的 Web 服务使用 SSL 通道。因此,在 IIS 中,转到 WebServSSL 的属性,选择目录安全性选项卡,然后点击编辑按钮。选中“需要安全通道(SSL)”复选框,并在客户端证书组中选择“需要客户端证书”选项。关闭所有窗口,现在尝试使用浏览器访问您的 Web 服务。
请求并获取用户证书
这一步将快速而简单。使用浏览器,使用相同的地址(http://w2ksrw/CertSrv
)访问 CA 的 Web 服务器。选择“请求证书”选项,然后点击下一步。选择“高级请求”选项,然后点击下一步。保持选中“使用表单向此 CA 提交证书请求”选项,然后点击下一步。在“识别信息”下填写您想要的姓名和电子邮件字段,并将其他字段保留原样。对于“预期用途”字段,选择客户端身份验证证书。对于最后一个设置,选择“导出密钥”选项。绕过其他字段,然后点击提交。对问题回答“是”,最后安装证书。
注意:在此步骤中,我在使用证书颁发机构网站时遇到问题。“正在下载 ActiveX 控件”消息没有消失。如果您遇到相同的问题,可以通过安装 Windows 2000 Advanced Server 的修复程序来解决。请参考 Microsoft 网站上的 KB323172 并找到相关的修复程序 q323172_W2K_SP4_X86_EN.exe。
在 Windows 窗体中使用证书
如果您愿意,可以在继续我的说明之前,尝试对您的示例进行更多测试。在您满意之后,启动 Internet Explorer 浏览器。选择工具,然后转到 Internet 选项。选择内容选项卡,然后点击证书按钮。您可以立即看到“个人”选项卡已选中,在列表控件中,您可以看到您的个人证书(对我来说是 Andy74)。选择指定的证书,然后点击导出按钮。在向导面板中选择下一步,选择“是,导出私钥”选项,然后再次点击下一步。在这里您只能以 PFX 格式导出;保留默认选项,然后点击下一步。输入密码。为简单起见,我选择了一个非常简单的密码,“password”。然后点击下一步。选择导出证书的位置,然后再次点击下一步。点击完成,然后在消息框中点击确定。现在,返回您的 Visual Studio 项目,并在创建 Web 引用实例后添加此行。
srv.ClientCertificates.Add(
new System.Security.Cryptography.X509Certificates.X509Certificate2(
@"c:\Andy74cert.pfx", "password"));
显然,请更改您保存证书的路径。现在,在拥有 Web 服务的机器上,转到控制面板的管理工具部分,然后启动服务器扩展管理器。选择文件 -> 添加/删除管理单元。在下一个窗口中点击添加按钮,选择证书,最后点击添加按钮。选择计算机帐户选项,然后点击下一步。保留“本地计算机”(运行此控制台的计算机)选项,然后点击完成。关闭活动窗口,最后点击确定按钮。在树视图中打开证书(本地计算机)节点,然后是受信任的根证书颁发机构以及证书节点。右键单击节点:所有任务 -> 导入以导入另一个向导。点击下一步。请记住我们在第四步从证书颁发机构下载的 .p7b 证书。浏览到该文件并选择它;然后点击下一步。选择“将所有证书放入以下存储”然后选择“受信任的根证书颁发机构”文件夹;点击下一步,然后完成。好了,您已准备好尝试您的最终应用程序了。要真正测试您的应用程序,您可以使用其他从未用过的机器。将您的应用程序和 .pfx 文件(证书)复制到您想要的位置,但请记住将证书文件放在加载应用程序的同一文件夹中,或者使用参数从您喜欢的任何位置加载它。
历史
- 2007 年 5 月 8 日 - 发布原始版本