我正在尝试将客户端证书应用于WCF REST服务。我找到了一些有关应用具有以下内容的客户端证书的详细信息:
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security>
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
在这种情况下似乎没有问题。我正在使用webHttpBinding,我收到一条错误消息,指出message
是security
节点的无效子节点。
我是否打算不正确地设置客户端证书?是否有人能够指出我正确的方向。
答案 0 :(得分:6)
wsHttpBinding配置中的消息节点是关于配置SOAP消息安全头的,这就是为什么它对webHttpBinding无效,而webHttpBinding不是基于SOAP(它是REST)
REST服务的适当安全性很可能是传输级别 - 即HTTPS。
如果要使用消息级别安全性,则需要切换到SOAP,但消息级别相当专业,在大多数情况下不是必需的。
如果需要为webHttpBinding使用证书(这意味着使用相互SSL),则需要将securityMode设置为Transport,将clientCredentialType属性设置为Certificate。在配置中,它在服务器端看起来像这样
<webHttpBinding>
<binding name="ClientCertServerSide">
<security mode="Transport" >
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</webHttpBinding>
在客户端,您可以在代码中指定证书(使用HttpWebRequest.ClientCertificates
属性)或在config中指定。在配置中它看起来像
<endpointBehaviors>
<behavior name="ClientCertClientSide">
<clientCredentials>
<clientCertificate findValue="put the cert name here" storeLocation="put the store here" />
</clientCredentials>
</behavior>
</endpointBehaviors>