IIS客户端证书不起作用。返回403错误

时间:2014-05-31 00:41:04

标签: iis ssl-certificate x509certificate

我尝试设置IIS 8(Windows Server 2012)以接受安全的WebAPI端点的客户端证书。在this post之后,我创建了自签名证书和客户端证书:

makecert.exe -r -n "CN=MyCompany" -pe -sv MyCompany.pvk -a sha1 -len 2048 -cy authority MyCompany.cer

makecert.exe -iv MyCompany.pvk -ic MyCompany.cer -n "CN=MY Client" -pe -sv MyClient.pvk -a sha1 -len 2048 -sky exchange MyClient.cer -eku 1.3.6.1.5.5.7.3.2

pvk2pfx.exe -pvk MyClient.pvk -spc MyClient.cer -pfx MyClient.pfx -po THE_PASSWORD

我在IIS服务器上安装了根证书MyCompany.cer,然后在IIS管理器/ SSL设置上我选择了"接受"单选按钮,允许网站接受客户证书。

在客户端,有一个C#测试控制台应用程序,用于加载客户端证书MyClient.pfx文件并调用WebAPI端点:

var certHandler = new WebRequestHandler();
certHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
certHandler.UseProxy = false;
var certificate = new X509Certificate2(File.ReadAllBytes(@"C:\MyClient.pfx"), "THE_PASSWORD");
certHandler.ClientCertificates.Add(certificate);
var client = new HttpClient(certHandler);
var result = client.GetAsync("https://MyServer/api/MyEndpoint").Result;
string resultStr = result.Content.ReadAsStringAsync().Result;
Console.WriteLine(resultStr);

我收到了403错误:

403 - Forbidden: Access is denied.
You do not have permission to view this directory or page using the credentials that you supplied.

我在本地IIS(Windows 7)上尝试了相同的设置:导入MyCompany.cer文件,在IIS中设置SSL。这一次一切正常,WebAPI端点可以看到客户端证书没有问题。

有什么想法吗?

- 更新1

我在IIS上启用了失败的请求跟踪,我得到了这个:

<failedRequest url="https://myserver:443/"
           siteId="35"
           appPoolId="CertTest"
           processId="7248"
           verb="GET"
           authenticationType="NOT_AVAILABLE"               activityId="{00000000-0000-0000-B0AA-0280000000E0}"
           failureReason="STATUS_CODE"
           statusCode="403.16"
           triggerStatusCode="403.16"
           timeTaken="0"
           xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb"
           >

如果我理解正确,错误是403.16。我理解,当服务器上的证书未导入本地计算机下的受信任的根证书颁发机构时,就会发生这种情况。我仔细检查过,这不是我的情况。

2 个答案:

答案 0 :(得分:4)

检查

  • 在IIS计算机上,您已将服务器的证书颁发者证书安装到本地计算机下的受信任的根证书颁发机构
  • 在IIS计算机上,您已将客户的证书颁发者证书安装到本地计算机下的受信任的根证书颁发机构
  • 在您的客户端计算机上,您已将Windows服务器的证书颁发者证书安装到运行控制台应用程序的Windows用户下的受信任的根证书颁发机构
  • 在客户端计算机上,您已将Windows客户端的证书颁发者证书安装到运行控制台应用程序的Windows用户下的受信任的根证书颁发机构。或者您可以确保include all necessary certificate's chain to pfx file
  • 在代码中明确使用X509Certificate2的ctor版本和X509KeyStorageFlags.UserKeySet。

如果没用,

  1. 尝试在IE中打开网址(在运行控制台应用的同一Windows用户帐户下)。
  2. 打开* .cer文件,双击运行控制台应用程序的Windows用户帐户下的客户端计算机,并查看Windows对其有效性的说明。
  3. 更改IIS SSL设置以忽略客户端证书,以查看服务器证书是否一切正常。尝试浏览器和控制台应用程序。

答案 1 :(得分:0)

看看以下博客文章:https://configmgrblog.com/2014/02/23/configmgr-2012-r2-internet-facing-mp-windows-server-2012-r2-note/

简而言之:Windows Server 2012(R2)中的客户端证书身份验证和IIS 8.x似乎存在问题,使用客户端证书时可能导致返回状态代码403.16。解决方案:

在服务器上的 HKey_Local_Machine \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL 下设置注册表DWORD条目:

SendTrustedIssuerList = 0
ClientAuthTrustMode = 2

该帖子进一步提到,如果在解决最初的问题(403.16)后得到403.13(吊销了客户端证书),则应在服务器上禁用客户端证书吊销检查。我不建议这样做。请确保在客户端证书中正确设置了CDP。 CDP必须可以从服务器访问,并且吊销列表应该有效且不过期。