我在几天前发布了关于对Web服务(Access control to web service)的访问控制。简而言之,我在 // service / webservice 上部署了一个ASP.NET Web服务,我想在 // web1 上使用我的ASP.NET Web应用程序(app1)使用证书身份验证访问Web服务。我一直收到 System.Net.WebException:请求失败,HTTP状态为403:Forbidden 异常。以下是我的设置:
在证书导出上;
// service / webservice 上的设置:
<authentication mode="Windows" />
在 // web1 / app1
上设置<authentication mode="Windows" />
和<identity impersonate="true" />
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();
我去了 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。
答案 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)
确保模拟的用户可以访问正在使用的证书存储区。