1.证书的制作
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=ParkingServer -sky exchange -pe
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=ParkingClient -sky exchange -pe
注意:证书制作完后还要对相应的证书读取权限作配置。
WCF取用X.509证书,服务端和客户端都要作相应的修改。
2.服务端的修改
behavior节点:
<behavior name="CustomBehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> <serviceCredentials> <clientCertificate> <authentication certificateValidationMode="None" /> </clientCertificate> <serviceCertificate findValue="ParkingServer" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" /> </serviceCredentials> </behavior>
binding节点
<wsHttpBinding> <binding name="CustomWsHttpBinding"> <security mode="Message"> <message clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding>
service节点
<service name="WcfService1.Service1" behaviorConfiguration="CustomBehavior"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="CustomWsHttpBinding" contract="WcfService1.IService1"> <identity> <dns value="ParkingServer" /> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service>
3.客户端的修改
client-endpoint节点
<endpoint address="http://localhost:60909/Service2.svc" binding="basicHttpBinding" behaviorConfiguration="CustomBehavior2" bindingConfiguration="BasicHttpBinding_IService2" contract="ServiceReference2.IService2" name="BasicHttpBinding_IService2"> <identity> <dns value="ParkingServer" /> </identity> </endpoint>
bindings节点
<basicHttpBinding> <binding name="BasicHttpBinding_IService2"> <security mode="Message"> <message clientCredentialType="Certificate" /> </security> </binding> </basicHttpBinding>
behavior节点
behavior节点,wsHttpBindings和basicHttpBindings的绑定内容有所不同。basicHttpBindings多一个defaultCertificate的配置
basicHttpBindings
<behavior name="CustomBehavior2"> <clientCredentials> <clientCertificate findValue="zoesoft" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/> <serviceCertificate> <authentication certificateValidationMode="None"/> <defaultCertificate findValue="ParkingServer" storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectName"/> </serviceCertificate> </clientCredentials> </behavior>
wsHttpBindings
<behavior name="CustomBehavior"> <clientCredentials> <clientCertificate findValue="zoesoft" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/> <serviceCertificate> <authentication certificateValidationMode="None"/> </serviceCertificate> </clientCredentials> </behavior>
参考:
WCF开发框架形成之旅--如何实现X509证书加密
Invoke WCF service from Java Client with Authentication (X.509 Certificate) Java 客户端调用WCF服务 需要安全验证