WCF 启用 X.509 证书的九个简单步骤






4.90/5 (55投票s)
WCF 启用 X.509 证书的九个简单步骤。
目录
- 引言和目标
- 初学者 WCF FAQ
- 步骤 1:创建客户端和服务器证书
- 步骤 2:将证书复制到“受信任的people”证书存储中
- 步骤 3:在 WCF 服务 web.config 文件中指定证书路径和模式
- 步骤 4:定义绑定
- 步骤 5:将绑定与终结点关联
- 步骤 6:制作您的 Web 应用程序客户端以消费 WCF 服务
- 步骤 7:在 WCF 客户端中定义证书
- 步骤 8:在 WCF 客户端中将行为与终结点关联
- 步骤 9:享受您的劳动成果
- 下载代码
引言和目标
在本文中,我们将讨论如何在 WCF 服务上启用证书。WCF 有两种数据传输模式:传输模式和消息模式。本教程将重点介绍如何在消息模式的数据传输中启用证书。
现在我正在分发我的 400 个问题和答案电子书,其中涵盖了主要的 .NET 相关主题,如 WCF、WPF、WWF、AJAX、核心 .NET、SQL Server、架构等等。我相信您会喜欢这本书:http://www.questpond.com/SampleDotNetInterviewQuestionBook.zip。我还一直在录制 .NET 技术视频,您可以在这里观看所有内容。
初学者 WCF FAQ
如果您是 WCF 新手,请参阅以下两篇 WCF FAQ 文章
- WCF FAQ 第一部分:这是一篇包含 20 个问题的 FAQ,面向初学者,解释了 WCF 的基本概念,如终结点、契约和绑定。它还讨论了 WCF 服务的各种托管方法。文章最后讨论了绑定和 WCF 中的单向操作。
- WCF FAQ 第二部分:这篇 FAQ 包含 10 个问题,讨论了双工契约、在不同协议上托管 WCF、MSMQ 绑定、事务隔离级别和双向通信等概念。文章还讨论了两个队列:易失性队列和死信队列。
步骤 1:创建客户端和服务器证书
使用 makecert.exe 创建两个证书,一个用于服务器,另一个用于客户端。您可以在“C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin”文件夹中找到 makecert.exe。您可以打开 DOS 命令提示符并运行以下命令片段
makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=WCfServer -sky exchange -pe
makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=WcfClient -sky exchange -pe
以下是 makecert.exe 中各种属性的详细说明。
Attribute | 解释 |
-sr | 指定证书存储的注册表位置。
|
-ss | 指定存储生成证书的证书存储名称。 |
-a | 指定算法。可以是 MD5 或 SHA1。 |
-n | 为证书指定一个名称。此名称必须符合 X.500 标准。最简单的方法是使用“CN=MyName”格式。如果未指定 /n 开关,则证书的默认名称为“Joe's Software Emporium”。 |
-sky | 指定密钥类型。可以是 exchange 或 signature。 |
-pe | 使密钥可导出。 |
注意:Makecert.exe 是 Microsoft 提供的一个免费工具,用于创建由系统测试根密钥或另一个指定密钥签名的 X.509 证书。这是一个测试证书,并非真实证书,不应用于生产环境。对于生产环境,请从 Thawte、Verisign、GeoTrust 等处购买合适的证书。
目前,我们已指定要创建名称为 WcfClient
的客户端密钥和名称为 WCFServer
的服务器密钥。证书应为当前用户创建,并且应该是可导出的。
运行命令后,您应该会看到如下所示的“Succeeded”消息。下图显示了为服务器和客户端创建的密钥。
步骤 2:将证书复制到“受信任的people”证书存储中
转到“开始”->“运行”,键入 MMC,然后按 Enter。您将看到 MMC 控制台。单击“文件”->“添加/删除管理单元”。您将看到“添加/删除管理单元”窗口,单击“添加”按钮,选择“证书”,然后选择“我的用户帐户”。
您可以在“个人”证书文件夹中看到为客户端和服务器创建的证书。我们需要将这些证书复制到“受信任的 people”->“证书”文件夹中。
步骤 3:在 WCF 服务 web.config 文件中指定证书路径和模式
现在我们已经创建了两个证书,需要在 WCF 项目中引用它们。我们创建了两个项目:一个包含 WCF 服务,另一个是用于消费 WCF 服务的 Web 应用程序。
让我们打开 WCF 服务的 web.config 文件并输入两项重要内容
- 证书存储位置以及 WCF 应用程序如何找到它。这使用
serviceCertificate
标签定义,如下面的代码片段所示。 certificationvalidationmode
定义了如何验证客户端证书。
证书验证模式 | 描述 |
证书链信任 | 在这种情况下,客户端证书将根据根证书进行验证。 |
对等信任 | PeerTrust 确保证书的公钥部分位于客户端计算机上的“受信任的 people”证书文件夹中 |
证书链或对等信任 | 这只是链信任和对等信任的 OR 条件。 |
以上两点合并后输入到 WCF 服务的 web.config 文件中。
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</clientCertificate>
<serviceCertificate findValue="WCfServer"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
步骤 4:定义绑定
现在我们已经定义了证书和身份验证类型,我们需要定义身份验证值将通过消息使用证书进行发送。您可以看到我们定义了 WsHttpBinding
,并设置了 message
属性,指定 WCF 客户端需要发送一个证书进行验证。
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security>
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
步骤 5:将绑定与终结点关联
完成后,我们需要将此绑定与终结点关联。这可以通过使用 bindingConfiguration
标签完成,如下面的代码片段所示。
<endpoint address="" binding="wsHttpBinding"
bindingConfiguration="wsHttpEndpointBinding" contract="WCFServiceCertificate.IService1">
步骤 6:制作您的 Web 应用程序客户端以消费 WCF 服务
以上是 WCF 服务方面的所有工作。编译 WCF 服务并使用“服务引用”在 ASP.NET Web 应用程序中引用它。下面是引用服务并调用服务 GetData
函数的代码片段。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebConsumer.ServiceReference1;
namespace WebConsumer
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Service1Client obj = new Service1Client();
Response.Write(obj.GetData(12));
}
}
}
现在,如果您尝试运行客户端(即 Web 应用程序),您应该会遇到如下所示的错误。错误清楚地表明,在提供客户端证书之前,您无法使用 WCF 服务。
步骤 7:在 WCF 客户端中定义证书
让我们开始在 WCF 客户端中定义证书的过程。我们定义身份验证证书模式和证书路径的方式,也需要为 WCF 客户端定义。您可以看到我们将身份验证模式定义为 peertrust
,并指定客户端证书名称为 WcfClient
。
<behaviors>
<endpointBehaviors>
<behavior name="CustomBehavior">
<clientCredentials>
<clientCertificate findValue="WcfClient" x509FindType="FindBySubjectName"
storeLocation="CurrentUser" storeName="My" />
<serviceCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
步骤 8:在 WCF 客户端中将行为与终结点关联
我们需要将上述定义的行为与终结点关联。您可以看到我们使用 behaviorConfiguration
属性绑定了行为。我们还需要指定 DNS 值为 WcfServer
,这是您的服务器证书名称。
<client>
<endpoint address="https://:1387/Service1.svc" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
name="WSHttpBinding_IService1" behaviorConfiguration="CustomBehavior">
<identity>
<dns value="WcfServer" />
</identity>
</endpoint>
</client>
步骤 9:享受您的劳动成果
完成后,您可以运行 ASP.NET Web 应用程序,您应该会看到如下显示。
下载代码
您可以在此处下载服务器和客户端代码。
如需进一步阅读,请观看以下面试准备视频和分步视频系列。