WCF和SSL相互认证403 - 禁止:访问被拒绝

问题描述:

我已经创建了一个wcf数据服务并通过HTTP公开,并且需要SSL。 我想通过证书(相互身份验证)对服务和客户端进行身份验证。 我正在使用开发人员证书。 因此,我将服务器的证书添加到客户的可信人员商店。WCF和SSL相互认证403 - 禁止:访问被拒绝

但我仍然收到一个异常:“403 - 禁止:访问被拒绝。”

1 - 这是我的服务器配置:

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
      <binding name="webHttpBindingConfig"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Certificate" /> 
       </security> 
      </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 

    </behaviors> 
    <services> 
     <service behaviorConfiguration="" name="PricingDataService"> 
      <endpoint address="https://MyServiceSecure/MyServiceSecure/MyServiceSecure.svc" 
       binding="webHttpBinding" bindingConfiguration="webHttpBindingConfig" 
       name="webHttpEndpoint" contract="System.Data.Services.IRequestHandler" /> 
     </service> 
    </services> 

如何使服务器能够识别客户端的证书? (它也应该是开发者证书)。

2 - 这里是我的客户端配置:

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
      <binding name="webHttpBindingConfig"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Certificate" /> 
       </security> 
      </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="clientCredentialBehavior"> 
      <clientCredentials> 
      <clientCertificate storeName="TrustedPeople" storeLocation="LocalMachine" 
           x509FindType="FindBySubjectName" findValue="tempClientcert" /> 
      </clientCredentials> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <client> 
     <endpoint address="https://MyServiceSecure/MyServiceSecure/MyServiceSecure.svc" 
      binding="webHttpBinding" bindingConfiguration="webHttpBindingConfig" 
      contract="System.Data.Services.IRequestHandler" name="" kind="" 
      endpointConfiguration="" behaviorConfiguration="clientCredentialBehavior"> 
      <identity> 
       <dns value="MyServiceSecure"/> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

3-这里是我用来调用WCF代码代码:

> MyServiceContext service = new MyServiceContext (
      new Uri("https://MyServiceSecure/MyServiceSecure/MyServiceSecure.svc")); 

service.SendingRequest += this.OnSendingRequest_AddCertificate; 


// 
private void OnSendingRequest_AddCertificate(object sender, SendingRequestEventArgs args) 
    { 
     if (null != ClientCertificate) 
      (args.Request as HttpWebRequest).ClientCertificates.Add(X509Certificate.CreateFromCertFile(@"C:\Localhost.cer");); 
    } 

做我就创建一个证书服务器,然后将其安装在客户端上?

我觉得你的证书可能是错误的,而是由IIS验证“客户端证书”下的“SSL设置”的网站要么设置为接受或需要开始时(看哪个适合你)。

我相信,为了您的目的,在IIS中为服务器创建自签名证书,然后将此证书导出到.pfx文件并将其安装到受信任的根目录中应该可行。

如果不帮你,我想看看这个问题:Using makecert for Development SSL

+0

好了,我创建的服务器证书,并将其导出到客户机上。如何让服务器识别并允许客户端访问它? (我网站的SSL设置被设置为Require)。 – Attilah 2011-04-06 22:46:57

+0

我并不确定你卡在哪里,但首先你需要为网站创建一个HTTPS绑定,请参阅http://learn.iis.net/page.aspx/144/how-to-set -up-ssl-on-iis-7 /这是否回答你的问题? – Tchami 2011-04-07 07:35:04

+0

我一直在试图让服务器识别客户端的证书。 – Attilah 2011-04-07 12:58:23