X509证书无法访问私钥

3

我正在从PKCS#12文件中(使用PFXImportCertStore Cryptographic API)导入X509到计算机的个人存储区。

问题:

任何在“本地服务”帐户或任何非管理员帐户下运行的进程都无法访问私钥(由Windows限制为仅限管理员用户)。

如何将证书的私钥访问权限授予非管理员用户和本地服务?

注意:

由于多个进程使用证书,因此我更喜欢使用计算机存储区而不是用户存储区。

1个回答

5

这是一个棘手的问题,有一些陷阱。我曾经遇到过同样的问题,几乎绝望了,最后在this post中找到了拯救我的备注。

我成功地为运行在 Network Service 账户下的本地服务执行了此操作。

首先,有一个选项可以授予其他用户访问 MS 证书存储中证书的私钥的权限。我认为这已经属于德鲁伊知识了:此选项可在上下文菜单中找到(右键单击证书),但仅当证书驻留在 localMachine\Personal 存储中时才可用。在那里,在条目 All tasks 中,您将找到子条目 Manage Private Keys。这在其他存储中甚至不在 CurrentUser\Personal 存储中都不可用。

此条目打开一个对话框,允许您为其他用户添加对证书的访问权限。在这里,下一个障碍等待着您:默认设置是在域中搜索用户,而不是在本地计算机上搜索。除非更改搜索过滤器,否则可能找不到所需的用户。

我通过谷歌搜索很快得到了这个结果,但它并没有帮助我。我可以让服务运行起来,但只有当我将服务用户更改为登录帐户时才能运行,这不是我想要的(顺便说一下,这导致了一个解决方法:为服务创建本地用户帐户,并从该用户帐户中导入证书。然后,您可以将证书放置在几乎任何存储区中,它将正常工作)。
这就是上面引用的帖子发挥作用的地方,也是我遇到的最后一个障碍:上述描述的过程似乎仅在您从MMC快捷菜单中导入证书时有效。选择存储位置localMachine\Personal,使用上下文菜单导入相关的证书。(我选择使私钥可导出,这可能在这里有或没有关联)。如果您通过在文件系统中双击证书来导入证书,则会将其导入到当前用户位置的某个存储位置中。我曾经这样做,然后将其移动到localMachine\Personal文件夹,并更改了访问权限--但这从来没有为我工作过。只有通过在MMC证书快捷菜单中从localMachine\Personal导入它,它才能立即工作...

请注意,您需要将证书放置在服务用户可以找到的存储中。您当前的用户存储通常不允许此操作,因此localMachine是更好的选择。

我不知道您之后是否可以移动证书,但这很容易在系统中检查。


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