我几天前发布了关于 Web 服务的访问控制(Web 服务的访问控制)。简而言之,我在//service/webservice上部署了一个 ASP.NET Web 服务,我希望//web1上的 ASP.NET Web 应用程序 (app1)能够通过证书身份验证访问 Web 服务。我不断收到System.Net.WebException: The request failed with HTTP status 403: Forbidden exception。以下是我的设置:
关于证书出口;
- 我从 LocalMachine 商店导出了颁发给//service的服务器证书并将其保存为 service.cer。
- 我还从 LocalMachine 商店导出了颁发给//web1的客户端证书并将其保存为 web1.cer
在//service/webservice上设置:
- 在目录安全上,未选中匿名访问和所有身份验证访问(集成 Windows 访问、摘要式身份验证和基本身份验证)。
- 在安全通信上,选中所需的安全通道 (SSL)、需要 128 位加密、需要客户端证书和启用客户端证书映射。然后,我将 web1.cer 映射到一个 AD 帐户MyDomain/user,该帐户有权访问//service/webservice
- 对于//service/webservice/WebService.asmx,
<authentication mode="Windows" />
在 web.config 上设置
//web1/app1上的设置
- 在 web.config 上设置
<authentication mode="Windows" />
和<identity impersonate="true" />
- 在 VS2008 中,我将 web 引用添加到//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。