无法从X509Store读取CurrentUser证书

9
我正在开发ASP.NET 4.0网络应用程序,我想从X509Store中读取当前用户证书。读取LocalMachine证书可以正常工作,但如果我将StoreLocation设置为CurrentUser,则会返回一个空集合。
以下代码可以正常工作:
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); // StoreLocation.CurrentUser
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

我已检查了我的个人存储(通过certmgr.mmc),并且确信我拥有证书。

我缺少什么?(store.Certificates为空)


1
那么 CurrentUser 将是应用程序池,而不是你。 - Roger Lipscombe
嗯...我明天试试看,看会发生什么 :) - Masinov
我已将应用程序池身份设置为:LocalSystem、Network Service和Application Pool Identity,但结果相同,列表为空。 - Masinov
是的。因为“CurrentUser”指的是当前用户。如果您在以您的身份登录时查看其中,那么您将会看到您的证书。但是您的ASP.NET应用程序并不是以您的身份运行的,所以它将只能看到它自己的证书,而不是您的。 - Roger Lipscombe
哦,我明白了。有没有办法让我在客户机上安装证书? 我需要这样做是因为我正在尝试实现一种方法,使用户可以更改当前的证书(在其到期之前)并在登录时请求该证书。感谢您的帮助@RogerLipscombe :) - Masinov
显示剩余2条评论
3个回答

2

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

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

我的解决方案 :

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


0

我曾经遇到过类似的问题,解决方法如下:

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

否则它可能会以通用的“IUSR”身份运行。


0
如果您的工作进程无法访问证书存储,可能只是帐户设置问题。尝试转到 IIS 配置,打开 ApplicationPools,在您的进程上右键单击,选择“高级”,并尝试将 LoadUserProfile 设置为 TRUE。然后重新启动该进程。这对我起作用了——在加载带有私钥的 .PFX 时不再出现异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接