I have a WCF service. I require certificate authentication from clients. This is the service configuration:
<system.serviceModel> <services> <service name="FilmLibrary.FilmManager" behaviorConfiguration="FilmService.Service1Behavior"> <endpoint address="manager" name="certBinding" binding="basicHttpBinding" contract="FilmContract.IFilmManager" /> </service> </services> <bindings> <basicHttpBinding> <binding name="certBinding"> <security mode="Message"> <message clientCredentialType="Certificate" /> </security> </binding> </basicHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="FilmService.Service1Behavior"> <serviceCredentials> <clientCertificate> <authentication trustedStoreLocation="LocalMachine" certificateValidationMode="PeerTrust" /> </clientCertificate> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
Public Key Installed in LocalMachine, Trusted People
Client configuration is as follows:
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="certBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="Message"> <message clientCredentialType="Certificate"/> </security> </binding> </basicHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="certBehaviour"> <clientCredentials> <clientCertificate findValue="SubjectKey" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName"/> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <client> <endpoint address="[...]/Service1.svc/manager" binding="basicHttpBinding" bindingConfiguration="certBinding" behaviorConfiguration="certBehaviour" contract="FilmsService.IFilmManager" name="certBinding" /> </client> </system.serviceModel>
The private key is set in the Personal, current user.
Without security, the service works. With security enabled, no. I tried several configurations and I was having errors, such as authentication, or that I have to set the service certificate in the clientCredentials element. Which I do not understand, because I do not want to fully authenticate the service.
source share