Wcf 是一门很强大的技术,刚开始研究的时候,大部分用的都是wsHttpBinding,这种方式确实比BasicHttpBinding有先天的优势,但是BasicHttpBinding仍然可以使用根证书双向验证,和用户名密码验证。
首先要从宏观上确定一下思路。服务端验证客户端,客户端也可以验证服务端。
在服务端的Web.config,节点<serviceCredentials></serviceCredentials> 下添加如下配置:
<clientCertificate>
<authentication certificateValidationMode="PeerTrust"/>
<certificate x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" findValue="testServer"/>
</clientCertificate>
如果写成如下这种形式:
<serviceCertificate findValue="CN=testServer"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectDistinguishedName"
/>
就会报错,运行时就会提示,说证书配置错误,这段其实是放在客户端的,用来客户端验证服务端的。
好了现在开始配置客户端:
<behaviors>
<endpointBehaviors>
<behavior name="echoClaimsBehavior">
<clientCredentials>
<!-- 客户端证书 -->
<clientCertificate findValue="tbzx-client"
storeName="My"
storeLocation="LocalMachine"
x509FindType="FindBySubjectName"/>
<serviceCertificate>
<authentication certificateValidationMode="None" revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
将节点行为
<endpoint address="https://服务端证书名/EMInquiryUserService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpsBinding_IEMInquiryUserService"
contract="EMInquiryUserService.IEMInquiryUserService"
name="BasicHttpsBinding_IEMInquiryUserService" behaviorConfiguration="echoClaimsBehavior" />
通过behaviorConfiguration 调用此行为,并且在绑定的时候,加入安全验证模式,如下所示:
<binding name="BasicHttpsBinding_IEMInquiryUserService">
<security mode="Transport" />
</binding>
然后就可以验证了