Windows 服务用户帐户无法访问证书存储
Windows service user account can't access the certificate store
背景
我有一个 Windows 7 VM,有两个用户帐户(condor_usr1 和 condor_usr2)用于源代码编译。 condor_usr[1|2] 帐户是管理员组的成员。我有一个 HTCondor 主 VM,它定期接收作业并将每个作业分配给 condor_usr[1|2] 帐户之一的 运行。 Win7 VM 运行s 上的 Condor 服务作为本地系统帐户,但实际上正在执行的作业 运行 作为 condor_usr[1|2] 帐户。
我有一个新的要求来签署编译后的可执行文件。我已将带有私钥的证书导入 Windows 证书存储中的当前 User\Personal 密钥存储。
问题
如果我作为 condor_usr 帐户之一登录到 Win7 VM(例如通过远程桌面),然后编译 运行ning 因为该帐户将成功签署可执行文件,但编译运行ning 因为另一个帐户将无法签署可执行文件。例如,如果我以 condor_usr2 身份登录,那么在 condor_usr2 下编译 运行ning 将签名成功,而在 condor_usr1 下编译 运行ning 将失败符号。如果我注销,两个帐户都无法签名。
我收到的具体错误是:
C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(264,9): error MSB3482: An error occurred while signing: The system cannot find the file specified.
打开了一些审核日志记录,发现以下日志与签名失败同时发生。
目标
无论编译使用哪个帐户,都可以成功签署已编译的可执行文件,运行并且不需要用户登录。
到目前为止我已经弄明白了
- 正在编译的 code/project 是 Visual Studio 2017 解决方案。
- 签名方式为ClickOnce清单签名(VS2017项目中的一个选项)。
- 编译作业启动时,作业以 condor_usr[1|2] 身份使用登录类型 2(交互式登录)登录。
https://ss64.com/nt/syntax-logon-types.html
我尝试过的事情
除非另有说明,否则这些操作没有任何效果并被还原。
- 将 condor_usr 帐户添加到加密操作员组。
- 正在将带有私钥的证书导入本地 Computer\Personal 密钥库。
- 使用
PsExec -h make.bat
获取账户的提升令牌。
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
- 我认为用户帐户控制 (UAC) 可能会阻止系统帐户 and/or condor_usr 帐户访问证书存储(或证书存储中的私钥),但 UAC 已经在 Win7 VM 上禁用。
- 我将原始的 .pfx 证书文件放在 VS2017 解决方案中,并将其作为目标而不是密钥库中的证书。这没有效果,这让我相信问题出在某种签名许可上,而不是(或者可能除了)围绕实际证书存储的纯粹许可。
- 我尝试在通过远程桌面登录时启动作业,然后在作业到达签名部分之前注销远程桌面会话(实际注销,而不是断开连接)。签名失败。
确保流程中涉及的所有帐户都具有 "Logon as service" 权限,方法是确保它们存在于本地策略 "Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Log on as a service" 中。请注意,此更改将在帐户所有者下次登录时生效。
尝试 运行 HTCondor 服务直接作为 "condor_usr1" 而不是 "Local System" 帐户。
背景
我有一个 Windows 7 VM,有两个用户帐户(condor_usr1 和 condor_usr2)用于源代码编译。 condor_usr[1|2] 帐户是管理员组的成员。我有一个 HTCondor 主 VM,它定期接收作业并将每个作业分配给 condor_usr[1|2] 帐户之一的 运行。 Win7 VM 运行s 上的 Condor 服务作为本地系统帐户,但实际上正在执行的作业 运行 作为 condor_usr[1|2] 帐户。
我有一个新的要求来签署编译后的可执行文件。我已将带有私钥的证书导入 Windows 证书存储中的当前 User\Personal 密钥存储。
问题
如果我作为 condor_usr 帐户之一登录到 Win7 VM(例如通过远程桌面),然后编译 运行ning 因为该帐户将成功签署可执行文件,但编译运行ning 因为另一个帐户将无法签署可执行文件。例如,如果我以 condor_usr2 身份登录,那么在 condor_usr2 下编译 运行ning 将签名成功,而在 condor_usr1 下编译 运行ning 将失败符号。如果我注销,两个帐户都无法签名。
我收到的具体错误是:
C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(264,9): error MSB3482: An error occurred while signing: The system cannot find the file specified.
打开了一些审核日志记录,发现以下日志与签名失败同时发生。
目标
无论编译使用哪个帐户,都可以成功签署已编译的可执行文件,运行并且不需要用户登录。
到目前为止我已经弄明白了
- 正在编译的 code/project 是 Visual Studio 2017 解决方案。
- 签名方式为ClickOnce清单签名(VS2017项目中的一个选项)。
- 编译作业启动时,作业以 condor_usr[1|2] 身份使用登录类型 2(交互式登录)登录。 https://ss64.com/nt/syntax-logon-types.html
我尝试过的事情
除非另有说明,否则这些操作没有任何效果并被还原。
- 将 condor_usr 帐户添加到加密操作员组。
- 正在将带有私钥的证书导入本地 Computer\Personal 密钥库。
- 使用
PsExec -h make.bat
获取账户的提升令牌。 https://docs.microsoft.com/en-us/sysinternals/downloads/psexec - 我认为用户帐户控制 (UAC) 可能会阻止系统帐户 and/or condor_usr 帐户访问证书存储(或证书存储中的私钥),但 UAC 已经在 Win7 VM 上禁用。
- 我将原始的 .pfx 证书文件放在 VS2017 解决方案中,并将其作为目标而不是密钥库中的证书。这没有效果,这让我相信问题出在某种签名许可上,而不是(或者可能除了)围绕实际证书存储的纯粹许可。
- 我尝试在通过远程桌面登录时启动作业,然后在作业到达签名部分之前注销远程桌面会话(实际注销,而不是断开连接)。签名失败。
确保流程中涉及的所有帐户都具有 "Logon as service" 权限,方法是确保它们存在于本地策略 "Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Log on as a service" 中。请注意,此更改将在帐户所有者下次登录时生效。
尝试 运行 HTCondor 服务直接作为 "condor_usr1" 而不是 "Local System" 帐户。