安装在Web服务器上时,客户端证书代码不起作用 - 在调试模式下工作

时间:2017-07-19 15:54:16

标签: c# asp.net asp.net-mvc ssl-certificate

我在两个不同的ASP.NET MVC网站中使用了以下代码。当我使用Visual Studio 2013在我的客户端工作站上运行代码时,X509Certificate2Collection" certificatesInUserStore"成功返回所有当前用户的客户端证书。这在IE和Firefox中成功发生。

但是,当我将应用程序部署到Web服务器时,不会收到任何个人证书。我使用带有passthrough的DefaultAppPool和带有应用程序池的第二个Web站点使用服务帐户来部署一个Web站点(无数据库后端)。 Web服务器是Windows Server 2012上的IIS 8.5,配置如下:

  1. 绑定是https,带有完全限定的主机名和自签名SSL证书(我已将自签名证书添加到客户端工作站Web浏览器上的受信任CA权限列表中)。
  2. 匿名,ASP.NET模拟,基本,表单和Windows身份验证均已禁用。
  3. SSL是"需要SSL"和#34;需要客户证书"。
  4. 使用manyToOneCertificateMappingEnabled启用iisClientCertificateMappingAuthentiation,并映射到具有网站目录结构权限的本地服务器帐户。\
  5. 我希望有人可以帮我解决配置问题。提前谢谢。

    public static X509Certificate2Collection GetClientCertificate()
    {
        x509Store UserStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        try
        {
            UserStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            X509Certificate2Collection certificatesInUserStore = UserStore.Certificates;
            int certCount = certificatesInUserStore.Count;
            if (certCount == 0)
            {
                throw new Exception("No client certificates present.");
            }
            return certificatesInUserStore;
        }
        catch
        {
            throw new Exception("An error occurred attempting to retrieve client certificate");
        }
        finally
        {
            UserStore.Close();
        }
    }
    

0 个答案:

没有答案