我正在开发ASP.NET 4.0 Web应用程序,我想从X509Store读取当前用户证书。读取LocalMachine证书工作正常,但如果我将StoreLocation设置为CurrentUser,它会给我一个空集合。
以下代码可以正常使用:
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); // StoreLocation.CurrentUser
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
我已经检查了我的个人商店(通过certmgr.mmc),我确信我有证书。
我错过了什么? (store.Certificates为空)
答案 0 :(得分:2)
无论您使用的是哪种应用程序池标识,似乎都无法通过Web应用程序访问个人证书存储区。
有意义的是,Web应用程序无权访问该位置。 :)
我的解决方案:
我开发了一个ActiveX控件,我认为它是访问Store的唯一方法。 (此外,Java Applet提供相同的功能)。 我通过JavaScript使用ActiveX控件来访问Store,并将该信息发送到服务器。
答案 1 :(得分:0)
如果您的工作进程无法访问证书存储区,可能只是帐户设置问题。尝试进入IIS配置,打开ApplicationPools,右键单击您的,选择Advanced并尝试将LoadUserProfile设置为TRUE。并重新启动池。它对我来说是工作 - 在使用私钥加载.PFX时没有例外。
答案 2 :(得分:0)
我有类似的问题。解决方案是:
IIS管理员 - > [您的虚拟目录] - >身份验证 - >匿名身份验证(选择然后点击“编辑...”)并将其更改为使用“应用程序池身份”。
否则它可能作为通用“IUSR”运行