我想使用客户端证书来保护我的WCF服务,即只允许来自特定根CA的客户端证书来调用我的服务。
出于测试目的,我首先创建了一个没有CA的单个客户端证书。我在服务器的证书库中注册了客户端证书(在当前用户 - >受信任的人员下)。
在VS2013中,我在WCF服务项目上启用了SSL,以便拥有HTTPS端点。我已经调整了服务的以下Web.config文件,如下所示:
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</clientCertificate>
...
</serviceCredentials>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
此外,我已经调整了我的客户端应用程序的App.config文件,如下所示:
<clientCredentials>
<clientCertificate findValue="Client" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="TrustedPeople" />
<serviceCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</serviceCertificate>
</clientCredentials>
<wsHttpBinding>
<binding name="WSHttpBinding_IService1">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
但是,这不起作用,我收到以下异常消息:
向https://localhost:44300/Service1.svc
发出HTTP请求时发生错误。这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书。这也可能是由于客户端和服务器之间的安全绑定不匹配造成的。
如果我切换到消息安全性(而不是传输安全性)并切换到HTTP协议,一切似乎都可以正常工作。所以我想我错过了一些启用HTTPS的步骤?!如何使运输安全工作?
答案 0 :(得分:0)
您的证书配置不正确。请遵循以下步骤
复制证书的指纹并在提升模式下从命令提示符运行以下命令
netsh http add sslcert [Ipaddress:port] certhash=[thumbprint of certifcate]
appid={unique id for application.you can use GUID for this]
[Ipaddress:port] Ipaddress and port
[thumbprint of certifcate]: thumbprint of certificate without spaces
appid :unique id you can use guid
如何从命令提示符生成GUID
打开visual studio命令提示符并运行以下命令
<强> C:GT;的uuidgen 强>