我编写了一个ASP.NET MVC应用程序。在应用程序中,我编写了一个名为GetClientCertificateCollection()的简单方法。该方法应该只返回当前用户的客户端证书。当我在VisualStudio 2013 / IIS Express [调试模式]中执行此代码时,逻辑工作正常,我可以毫无问题地处理用户的X509证书[我也检索服务器的证书,但我&#39 ;写的可以忽略它们,只通过有效的用户证书处理]。
不幸的是,当我将我的解决方案部署到Web服务器上的IIS实例时,该方法什么都不返回;字面上0证书。
我已经研究并尝试过一些建议,但我找不到吸烟枪是不成功的。
我的IIS配置如下: 1.站点作为"默认网站"的子目录托管。 2.绑定 - 端口443启用SSL证书。 2.身份验证 - 全部禁用。 3. SSL设置 - 需要SSL /要求。
我希望有人可以帮助我指出正确的方向。在此先感谢您的帮助。
public static X509Certificate2Collection GetClientCertificateCollection()
{
X509Store UserStore = new X509Store(StoreName.My, StoreLocation.CurrentUser)
try
{
UserStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certficate2Colllection certificatesInStore = UserStore.Certificates;
return certificatesInStore;
}
catch (Exception ex)
{
throw;
}
finally
{
UserStore.Close
}
}
答案 0 :(得分:2)
我几乎100%确定您没有任何证书,因为您没有将它们放入应用池的身份资料中。
换句话说,您错误地假设您的应用程序在完全相同的配置文件(您的配置文件)下在IIS上运行,而实际上应用程序池具有另一个不同的标识集。
您必须检查应用程序池的设置,找到池运行的标识,以此身份登录,访问其证书存储区并将证书放在那里。如果您的应用程序池使用APP POOL
标识池,则可能会出现问题,您只能从此池中以身份身份登录。在这种情况下,您必须切换到共享证书存储(计算机存储),它是由任何标识访问的单个证书存储区。
答案 1 :(得分:0)
自从发布这个问题以来我学到了很多东西。当我最初发布这个问题时,我忽略了一些相当简单的障碍,我希望我的答案可以帮助那些可能会遇到同样问题的人。