我几天前发布了有关网络服务访问控制的文章(Web 服务的访问控制 https://stackoverflow.com/questions/390853/access-control-to-web-service)。简而言之,我部署了一个 ASP.NET Web 服务//服务/网络服务我希望我的 ASP.NET Web 应用程序 (app1) 位于//web1通过证书身份验证访问 Web 服务。我不断得到System.Net.WebException:请求失败,HTTP 状态 403:禁止例外。以下是我的设置:
关于证书导出;
- 我导出了颁发给的服务器证书//服务来自 LocalMachine 商店并将其另存为 service.cer。
- 我还导出了颁发给的客户端证书//web1来自 LocalMachine 商店并将其另存为 web1.cer
设置为//服务/网络服务:
- 在目录安全性上,取消选中匿名访问和所有身份验证访问(集成 Windows 访问、摘要式身份验证和基本身份验证)。
- 在安全通信上,选中所需安全通道 (SSL)、需要 128 位加密、需要客户端证书和启用客户端证书映射。然后我将 web1.cer 映射到 AD 帐户我的域/用户有权访问//服务/网络服务
- For //服务/webservice/WebService.asmx, set
<authentication mode="Windows" />
在 web.config 上
设置为//网站1/应用程序1
- Set
<authentication mode="Windows" />
and <identity impersonate="true" />
在 web.config 上
- 在VS2008中,我添加了网络引用//服务/webservice/WebService.asmx并将其命名为WService
- In //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 来授予 ASPNET 帐户对 LocalMachine 中两个证书的访问权限
我去了https://service/webservice/WebService.asmx https://service/webservice/WebService.asmx并被提示提供客户端证书,之后我就完成了。但如果我去https://web1/app1/default.aspx https://web1/app1/default.aspx(这将调用 Web 服务)并且我会收到 HTTP 状态 403 异常。
我错过了什么?我认为问题是因为//web1/app1/default.aspx.cs无法传输证书。如果这是问题所在,我该怎么办?我在 VS 2008 和 ASP.NET 3.5 上构建了 asmx 和 aspx。
确保您的客户端证书被请求作为“客户端身份验证”的“计算机”模板证书,否则它将无法工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)