WCF通过证书传输安全性

时间:2014-01-22 11:12:09

标签: c# wcf security ssl

我想使用客户端证书来保护我的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的步骤?!如何使运输安全工作?

1 个答案:

答案 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