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
好了,我创建的服务器证书,并将其导出到客户机上。如何让服务器识别并允许客户端访问它? (我网站的SSL设置被设置为Require)。 – Attilah 2011-04-06 22:46:57
我并不确定你卡在哪里,但首先你需要为网站创建一个HTTPS绑定,请参阅http://learn.iis.net/page.aspx/144/how-to-set -up-ssl-on-iis-7 /这是否回答你的问题? – Tchami 2011-04-07 07:35:04
我一直在试图让服务器识别客户端的证书。 – Attilah 2011-04-07 12:58:23