要求使用WCF进行SSL会导致“HTTP请求被禁止使用客户端身份验证方案'匿名'”错误?

时间:2013-04-26 15:33:57

标签: wcf ssl client wcf-client anonymous

我们在IIS中托管了一个客户端dll尝试访问的WCF服务。该服务绑定在IIS中以使用HTTPS,并设置为忽略客户端证书,这可以正常工作,但需要SSL导致问题。

我真的不明白的是,调用其中一个服务的方法工作正常,但调用另一个方法不起作用,我得到以下错误:“HTTP请求被禁止与客户端身份验证方案'匿名'.System.Net.WebException:远程服务器返回错误:(403)Forbidden。“

可能导致这种情况的原因是什么?我是WCF的新手,所以如果我遗漏任何内容或者是否有更多需要的信息,请告诉我。

以下是一些服务配置代码:

this.Description.Behaviors.Add(new FaultConversionErrorHandler());
this.Description.Behaviors.Add(new LoggingErrorHandler());

BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;

ServiceEndpoint endpoint = this.AddServiceEndpoint(typeof(ILicenseService), binding, String.Empty);

SecurityEndpointBehavior securityEndpointBehavior = new SecurityEndpointBehavior();
endpoint.Behaviors.Add(securityEndpointBehavior);

以下是客户端如何引用该服务:

EndpointAddress a = new EndpointAddress(licenseServiceUrl);
Binding b = new BasicHttpBinding(BasicHttpSecurityMode.Transport);

LicenseServiceClient client = new LicenseServiceClient(b, a);
client.Endpoint.Behaviors.Add(new SecurityEndpointBehavior());

1 个答案:

答案 0 :(得分:0)

您可以通过更改绑定信息来解决此问题。 将TransportClientCredential Type设置为证书以在IIS SSL设置中使用所需的证书。

如果是Ws-Http,那就有点不同了。 WCF WS-service主机实际上正在检查受信任人员中是否存在传入客户端请求证书。 因此,远程证书应该存在于服务器的可信任人员中。

或者添加CustomValidator并覆盖行为。