HTTP状态403:使用证书对ASP.NET Web服务进行身份验证的禁止异常

时间:2008-12-30 00:03:00

标签: c# asp.net web-services authentication certificate

我在几天前发布了关于对Web服务(Access control to web service)的访问控制。简而言之,我在 // service / webservice 上部署了一个ASP.NET Web服务,我想在 // web1 上使用我的ASP.NET Web应用程序(app1)使用证书身份验证访问Web服务。我一直收到 System.Net.WebException:请求失败,HTTP状态为403:Forbidden 异常。以下是我的设置:

在证书导出上;

  • 我从LocalMachine商店导出了发送到 // service 的服务器证书,并将其保存为service.cer。
  • 我还从LocalMachine商店导出了发送到 // web1 的客户端证书,并将其另存为web1.cer

// service / webservice 上的设置:

  • 在目录安全性上,取消选中匿名访问和所有身份验证访问(集成Windows访问,摘要式身份验证和基本身份验证)。
  • 在安全通信上,选中要求的安全通道(SSL),要求128位加密,要求客户端证书和启用客户端证书映射。然后,我将web1.cer映射到AD帐户 MyDomain / user ,该帐户可以访问 // service / webservice
  • 对于 // service / webservice / WebService.asmx ,请在web.config上设置<authentication mode="Windows" />

// web1 / app1

上设置
  • 在web.config
  • 上设置<authentication mode="Windows" /><identity impersonate="true" />
  • 在VS2008中,我将网络参考添加到 // service / webservice / WebService.asmx 并将其命名为WService
  • // web1 / app1 / default.aspx.cs 中,我有这个:
  

using System.Security.Cryptography.X509Certificates;
    using System.Net;
        WService.WebService ws = new WService.WebService();
        ServicePointManager.ServerCertificateValidationCallback = delegate(Object sender1, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors errors) { return true; };
//I was a bit confused here on which certificate I should use so I have tried both service.cer and web1.cer but still got the same error
        X509Certificate x509 = X509Certificate.CreateFromCertFile(@"C:\Certificates\service.cer"); 
        ws.ClientCertificates.Add(x509);
        ws.DoSomething();
  • 我运行WinHttpCertCfg.exe以授予访问LocalMachine for ASPNET帐户的两个证书

我去了 https://service/webservice/WebService.asmx ,并被提示提供客户证书,之后我就通过了。但是,如果我去 https://web1/app1/default.aspx (这将调用Web服务),我将获得HTTP状态403异常。

我错过了什么?我认为问题是因为 // web1 / app1 / default.aspx.cs 无法传输证书。如果这是问题,我该怎么做?我在VS 2008和ASP.NET 3.5上构建了asmx和aspx。

4 个答案:

答案 0 :(得分:2)

听起来SSL证书无法为Web服务客户端进行身份验证。一个好的检查是,如果您从客户端的计算机转到该服务并在浏览器中收到有关SSL证书的警报,您的服务将不会使用该证书进行身份验证(证书不受信任)。并不是证书不起作用,它只是不受信任。

如果服务跨越计算机,则可能必须设置证书颁发机构(这可能有助于http://www.petri.co.il/install_windows_server_2003_ca.htm)并将其作为受信任的发布者添加到客户端计算机上。这也可以帮助http://support.microsoft.com/kb/901183

另一个选择是简单不验证SSL,请参阅: http://geekswithblogs.net/jwhitehorn/archive/2006/09/20/91657.aspx

答案 1 :(得分:2)

确保您的客户端证书是“客户端身份验证”的“计算机”模板证书,否则无法使用。

答案 2 :(得分:1)

当我遇到这个问题时,我发现我使用的客户端证书/密钥对是由当前用户存储中的中间CA而不是本地机器商店签名的。如果您在登录时检查了证书但IIS工作进程无法看到中间CA,那么一切看起来都很好。因此,Web服务调用未向证书提供请求。您可以通过检查服务器Web日志以查找403 7 5响应来验证这一点。

答案 3 :(得分:0)

确保模拟的用户可以访问正在使用的证书存储区。