使用x509证书保护.svc Web服务

时间:2014-12-01 09:25:56

标签: c# web-services wcf ssl

我在我的服务器上托管了一个.svc Web服务,我们使用低行为作为测试,以确保webservice调用者获得他们应该获得的内容。 现在我想使用x509证书,我有证书并需要将其发送给消费者,以便他们可以仔细检查是否可以交换数据。 我不确定要采取哪些步骤 我有这两个文档,但我想与任何知道如何做得更好的人仔细检查。

steps to enable x509

Pattern and practice WCF

1 个答案:

答案 0 :(得分:0)

如果要使用x509证书对调用WCF服务的客户端进行身份验证,那么您引用的第一篇文章是一个非常好的分步指南。 http://www.codeproject.com/Articles/36683/simple-steps-to-enable-X-certificates-on-WCF 本文假设您的客户端和服务都在同一台计算机上运行,​​因此您需要针对特定​​情况调整说明。

第1步:创建客户端和服务器证书

由于您已拥有证书,因此可以跳过此步骤。您必须使用步骤3和7中的服务器和客户端证书中的名称替换WcfServer和WcfClient。

步骤2:将证书复制到受信任的人员证书

参考文章介绍了如何在MMC中打开“证书”管理单元。由于您使用的是现有证书,因此可能需要在客户端计算机上的服务器和客户端证书上导入服务证书。然后导出没有私钥的客户端证书,并将其导入服务器计算机上的“受信任的人”文件夹。

步骤3:在WCF服务web.config文件中指定证书

<serviceCredentials>
  <clientCertificate>
    <authentication certificateValidationMode="PeerTrust"/>
  </clientCertificate>
  <serviceCertificate findValue="!Insert name from your server certificate here!"
     storeLocation="LocalMachine"
     storeName="My"
     x509FindType="FindBySubjectName" />

步骤4:在WCF服务web.config文件中定义绑定

<bindings>
  <wsHttpBinding name="wsHttpEndpointBinding">
    <binding>
      <security>
        <message clientCredentialType="Certificate" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

步骤5:使用WCF服务web.config文件中的结束点绑定绑定

<endpoint address="" binding="wsHttpBinding" 
   bindingConfiguration="wsHttpEndpointBinding" contract="WCFServiceCertificate.IService1">

步骤6:使您的Web应用程序客户端使用WCF服务。

添加服务引用时,Visual Studio会在客户端web.config文件中插入元素。您需要按照步骤7和步骤8进行修改。

步骤7:在客户端web.config文件中为WCF客户端定义证书

<behaviors>
  <endpointBehaviors>
    <behavior name="CustomBehavior">
      <clientCredentials>
        <clientCertificate findValue="!Insert name from your client certificate here!"
            x509FindType="FindBySubjectName" 
            storeLocation="CurrentUser" storeName="My" />
      <serviceCertificate>
         <authentication certificateValidationMode="PeerTrust"/>
      </serviceCertificate>
   </clientCredentials>
 </behavior>
</endpointBehaviors>

步骤8:将行为与客户端web.config文件中的WCF客户端上的端点联系起来

您需要替换地址,合同和dns值以匹配您的实际WCF服务。

<client>
  <endpoint address="http://localhost:1387/Service1.svc" binding="wsHttpBinding"
      bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
      name="WSHttpBinding_IService1" behaviorConfiguration="CustomBehavior">
    <identity>
      <dns value="WcfServer" />
    </identity>
  </endpoint>
</client>