我创建了一个wcf服务,并且可以在客户端应用程序中成功引用它。但是当我实施X509证书时,问题出现了。
1)当我更改服务以使用x509证书时,我无法创建代理,因为浏览器中未显示mex端点。那么在这种情况下,当服务受到保护并且未公开mex端点时,我应该如何在客户端应用程序中引用服务?
2)我可以同时使用邮件和传输安全作为证书吗?这个场景是否适用于basicHttpBinding?我听说basicHttpBinding不能通过证书来保证消息安全。
在这方面的任何帮助,将受到高度赞赏。
这是我服务中的服务模型。
<system.serviceModel>
<client>
<endpoint behaviorConfiguration=""
binding="basicHttpBinding"
bindingConfiguration="WCFServiceX509Binding"
contract="WCFService.Contract.Service.IWCFServiceContract"
name="WCFServiceClientEndPoint" />
</client>
<bindings>
<basicHttpBinding>
<binding name="WCFServiceX509Binding" maxBufferSize="6553600"
maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" />
<message clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior"
name="WCFService.Model.WCFServiceModel">
<endpoint
address=""
binding="basicHttpBinding"
bindingConfiguration="WCFServiceX509Binding"
name="WCFServiceBasicHttpEndPoint"
contract="WCFService.Contract.Service.IWCFServiceContract">
<identity>
<certificateReference findValue="WCFUADOCServer" />
</identity>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ClientCertificateBehavior">
<clientCredentials>
<clientCertificate findValue="WCFUADOCServer"
x509FindType="FindBySubjectName"
storeLocation="LocalMachine"
storeName="TrustedPeople" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
非常感谢, 昌德。
答案 0 :(得分:0)
BasicHttpBinding
。我自己感到很惊讶,但BasicHttpBinding
实际上支持完全相互证书的非对称邮件安全性。如果要使用传输安全性公开服务,则必须使用HTTPS - 由IIS management console(在IIS中托管时)或assign certificate to port by netsh(自托管)配置。请注意,运行该服务的帐户必须能够访问证书中的私钥 - you must correctly set up ACL。
如果要按证书对客户端进行身份验证,则应设置service credentials。如果您使用放置到证书库的自签名证书,则应至少使用以下内容:
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust" />
</clientCertificate>
</serviceCredentials>
您还可以定义custom certificate validator。对于端点使用而不是dns标识。
对于客户端,还使用PeerTrust验证模式进行服务证书。