2012-03-21 84 views
8

我正在开发ASP.NET 4.0 Web应用程序,我想从X509Store读取当前用户证书。读取LocalMachine证书工作正常,但如果我将StoreLocation设置为CurrentUser,它会给我一个空集合。无法从X509Store读取CurrentUser证书

下面的代码工作正常:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); // StoreLocation.CurrentUser 
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

我检查了我的个人存储(通过certmgr.mmc),我敢肯定,我有证书。

我错过了什么? (store.Certificates为空)

+0

应用程序是否以您的身份运行? – 2012-03-21 16:23:09

+0

该应用程序托管在我的本地IIS(7.5)上。应用程序池设置为ApplicationPoolIdentity。 – 2012-03-21 18:10:00

+1

...那么CurrentUser将是应用程序池,而不是你。 – 2012-03-21 19:57:56

回答

2

无论您使用的是什么应用程序池标识,您都无法通过Web应用程序访问个人证书存储。

它是有道理的,一个Web应用程序无法访问该位置。 :)

我的解决办法:

我开发的ActiveX控件,我认为它来访问存储的唯一途径。 (另外,Java Applet提供相同的功能)。 我使用通过JavaScript的ActiveX控件访问存储,并将该信息发送到服务器。

0

如果您的工作进程无法访问cert store,可能只是帐户设置问题。尝试进入IIS配置,打开ApplicationPools,右键单击你的,选择高级,然后尝试将LoadUserProfile设置为TRUE。然后重新启动游泳池。它为我工作 - 在使用私钥加载.PFX时没有更多的例外情况。

0

我有类似的问题。解决方案是:

IIS管理 - > [您的虚拟目录] - >身份验证 - >匿名身份验证(选择然后单击“编辑...”)并将其更改为使用“应用程序池标识”。

否则它可能作为通用“IUSR”运行