如何授予用户访问 Windows Server 2012 上的证书存储的权限?

sim*_*ich 5 certificate user-permissions winrm windows-server-2012

在过去的几天里,我一直在与一个似乎无法解决的问题作斗争。尽管我对某些管理任务有一定的了解,但我不是管理员。

我有一个使用 XapSignTool.exe 对 .xap 包进行签名的 PowerShell 脚本。提供私钥和密码。当我以管理员组中的用户身份登录时运行脚本时,它工作正常。

我还在同一台计算机上运行 Windows 远程管理服务。在另一台 Linux 机器上,我使用 winrm 协议使用所需参数调用 PowerShell 脚本。然后,XapSignTool.exe 工具,或者特别是下面使用的signtool.exe,会抛出错误:

Error information: "Error: Store::ImportCertObject() failed." (-2146893808/0x80090010)
Run Code Online (Sandbox Code Playgroud)

我查找了代码并发现了它的含义,即

NTE_PERM
0x80090010
访问被拒绝。

ImportCertObject() 方法的名称让我认为该工具尝试将提供的私钥导入到证书存储区。

有趣的是,如果我在登录时首先运行该脚本并且它可以工作,则通过 winrm 进行的后续调用也可以工作。这让我相信作为管理员的用户可以正确导入证书。

WRM 服务在网络服务帐户下运行,因此我假设它没有插入证书存储的权限。我把NS帐户放在Administrators组中,希望它能起作用,但没有。对于测试,我将 \Everyone 放入管理员组,但对 PowerShell 脚本的 winrm 调用仍然失败,并显示“访问被拒绝”。

为什么是这样?如何向用户授予对证书存储的访问权限?

我还希望能够对许多此类证书执行此操作,因此它必须是自动化的。

sim*_*ich 2

经过几天的研究,我没有找到最低有意义水平的原因,但略高于tat。

该脚本在用户登录时起作用,因为该用户已经在计算机上以交互方式登录。如果我退出计算机,则脚本将停止工作。

这是 WinRM 的问题,解决方法之一是使用 CredSSP。解决这个问题的另一种方法是将整个解决方案改为HTTP服务或消息队列消费者。