2010-07-12 116 views
2

我一直在努力与WCF一段时间,我似乎无法弄清楚。 我有一个启用SSL的自托管WCF服务(使用来自自签名根CA的签名证书),迄今为止都非常好。该服务用于企业对企业的沟通,因此证书似乎是最好的解决方案。WCF传输安全与peertrust和自签名客户端证书

(我使用的是WS此刻结合但那只是因为所有绑定方法支持发展的目的(据我所知)与客户端证书的传输层安全)。

一些相关的配置位服务:

<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Certificate"/> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

<!-- snip --> 

<serviceCredentials> 
    <clientCertificate> 
    <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" /> 
    </clientCertificate> 
</serviceCredentials> 

当我在客户端使用自签名的证书是在运行失败的WCF服务的用户的“信任的人”商店。当我使用由我自己的根CA签名的证书时,即使它不在“可信人员”存储中,它也能正常工作。

我期待着我能够使用自签名证书,将它们存储在“可信赖的人”存储中,事情就会起作用。但似乎有一些额外的验证正在进行,那里有我失踪的东西?有没有更好的办法?

回答

0

对,因此,传输安全和证书验证在WCF无法控制的较低级别处理。因此,所有那些使用自定义验证程序的奇特事物都不适用于传输安全性,而仅仅是消息安全性。 要在仅使用传输安全性的同时限制客户端访问,您需要设置CTL(证书信任列表)。以下网站应该给你一些指导。

http://www.leastprivilege.com/CertificateBasedAuthenticationAndWCFTransportSecurity.aspx http://viisual.net/configuration/IIS7-CTLs.htm

0

我同样的问题挣扎其中,即使它是不是在“受信任人”存储,尽管“PeerTrust”的验证方式我自签署客户端证书将被验证。我终于能够限制服务通过使用以下服务行为接受特定的客户端证书:被要求指向正确的商店

<behaviors> 
    <serviceBehaviors> 
     <behavior ...> 
     ... 
     <serviceCredentials> 
      <clientCertificate> 
       <authentication certificateValidationMode="PeerTrust" 
           revocationMode="NoCheck" 
           trustedStoreLocation="LocalMachine" /> 
       <certificate findValue="NameOfClientCertificate" 
          x509FindType="FindBySubjectName" 
          storeLocation="LocalMachine" 
          storeName="TrustedPeople" /> 
      </clientCertificate> 
     </serviceCredentials> 
     ... 
     </behavior> 
     ... 

两个认证要素和证书元素,在这case“LocalMachine”。

相关问题