X509证书访问私钥被拒绝



我是从pkcs# 12文件导入X509(使用PFXImportCertStore加密API)在计算机的个人商店。

问题:

任何在"本地服务"帐户或任何非Admin帐户下运行的进程都不能访问私钥(Windows限制为Admin用户)。

如何让非管理员用户和本地服务访问证书的私钥?

注意:

由于多个进程使用证书,我更倾向于使用Computers store而不是user's store

这是一个有一些陷阱的棘手问题。我也有同样的问题,当我终于找到这篇文章中救了我的那句话时,我几乎绝望了。

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

首先,有一个选项授予其他用户对MS证书存储库中证书的私钥的访问权。我已经把这个分类为德鲁伊知识:这个选项在上下文菜单中可用(右键单击证书),但是如果证书驻留在localMachinePersonal存储中,则只有。在这里,在条目All tasks中,你会发现子条目Manage Private Keys。这个在其他商店没有,甚至在CurrentUserPersonal商店也没有。

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

对于这个结果,我通过谷歌很快就得到了,但它没有帮助。我可以让服务运行,但前提是我将服务用户更改为登录帐户,这不是我想要的(顺便说一句,这导致了一个解决方案:为服务创建一个本地用户帐户,并从该用户帐户中导入证书。然后,您可以将证书放在几乎任何存储中,它都可以正常工作)

这就是上面引用的帖子的来源,对我来说最后一个障碍:上面描述的过程似乎只有当您从MMC管理单元内将证书导入证书存储时才有效。选择存储localMachinePersonal并使用上下文菜单导入相关证书。(我选择将私钥设置为可导出的,这可能与此有关,也可能与此无关)。如果您通过在文件系统中双击证书来导入证书,它将被导入到Current User位置中的某个存储中。我过去常常这样做,然后将其移动到localMachinePersonal文件夹并更改访问权限——这对我来说从来没有工作。只有在从MMC证书管理单元的localMachinePersonal中导入它之后,它才能立即工作…

(还要注意,您必须将证书放入服务用户可以找到的存储中。您当前的用户存储通常不允许这样做,所以localMachine是更好的选择,无论如何)

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

最新更新