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

0yg35tkg  于 2022-11-15  发布在  .NET
关注(0)|答案(4)|浏览(206)

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

  • 我从LocalMachine存储导出了颁发给**//service**的服务器证书,并将其保存为service. cer。
  • 我还从LocalMachine存储导出了一个颁发给**//web 1**的客户端证书,并将其保存为web1.cer

在**//服务/Web服务**上安装:

  • 在“目录安全性”中,取消选中“匿名访问”和所有身份验证访问(集成Windows访问、摘要式身份验证和基本身份验证)。
  • 在“安全通信”上,选中“需要安全通道(SSL)”、“需要128位加密”、“需要客户端证书”和“启用客户端证书Map”。然后,我将web1.cerMap到具有访问**//service/webservice权限的AD帐户MyDomain/user**
  • 对于**//服务/Web服务/Web服务.asmx**,请在web.config上设置<authentication mode="Windows" />

在**//web 1/app 1上安装**

  • 在web.config上设置<authentication mode="Windows" /><identity impersonate="true" />
  • 在VS 2008中,我添加了对**//service/webservice/WebService.asmx**的Web引用,并将其命名为WService
  • 在**//web 1/app 1/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://web1/app1/default.aspx(它将调用Web服务),我将得到HTTP状态403异常。
我错过了什么?我会假设问题是因为
//web 1/app 1/default.aspx.cs**无法传输证书。如果这是问题所在,我该如何做呢?我在VS 2008和ASP.NET 3.5上构建了asmx和aspx。

8yparm6h

8yparm6h1#

请确保您的客户端证书是作为“客户端身份验证”的“计算机”模板证书请求的,否则它将不起作用。

fslejnso

fslejnso2#

听起来像是SSL证书无法为Web服务客户端进行身份验证。如果您从客户端计算机访问服务,并在浏览器中收到有关SSL证书的警报,则您的服务将无法使用该证书进行身份验证(证书不受信任),这是一个很好的检查。这并不是证书不起作用,而是证书不受信任。
如果服务是跨机器的,你可能需要设置一个证书颁发机构(这可能对http://www.petri.co.il/install_windows_server_2003_ca.htm有帮助),并将其添加为客户端机器上的受信任发布者。
另一个选项是简单地不验证SSL,请参阅:http://geekswithblogs.net/jwhitehorn/archive/2006/09/20/91657.aspx

mzaanser

mzaanser3#

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

p1tboqfb

p1tboqfb4#

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

相关问题