Учетная запись пользователя службы Windows не может получить доступ к хранилищу сертификатов - PullRequest
0 голосов
/ 24 сентября 2019

Фон

У меня есть виртуальная машина Windows 7 с двумя учетными записями пользователей (condor_usr1 и condor_usr2), которая используется для компиляции исходного кода.Учетные записи condor_usr [1 | 2] являются членами группы администраторов.У меня есть главная виртуальная машина HTCondor, которая периодически получает задания и назначает каждую работу для выполнения одной из учетных записей condor_usr [1 | 2].Служба condor на виртуальной машине Win7 работает как локальная системная учетная запись, но выполняемые задания фактически выполняются как учетная запись condor_usr [1 | 2].

У меня есть новое требование подписать скомпилированный исполняемый файл.Я импортировал сертификат с закрытым ключом в хранилище «Текущий пользователь \ Персональный ключ» в хранилище сертификатов Windows.

Проблема

Если я вошел в виртуальную машину Win7 (например, через удаленный рабочий стол)) в качестве одной из учетных записей condor_usr, то компиляция выполняется, так как эта учетная запись успешно подпишет исполняемый файл, но компиляция работает, поскольку другая учетная запись не сможет подписать исполняемый файл.Например, если я вошел в систему как condor_usr2, компиляторы, работающие под condor_usr2, успешно подпишутся, а компиляторы, работающие под condor_usr1, не получат подписи.Если я выйду из системы, обе учетные записи не получат подписи.

Я получаю конкретную ошибку:

C:\Program Files (x86)\Microsoft Visual Studio\2017\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.

Включил некоторые журналы аудита и обнаружил следующий журнал, который произошел одновременно сошибка подписи.

signing failure

Цель

Успешно подписать скомпилированный исполняемый файл независимо от того, под какой учетной записью выполняется компиляция, и не требуяпользователь должен войти в систему.

Что я понял до сих пор

  • Скомпилированный код / ​​проект является решением Visual Studio 2017.
  • Подписаниеметод подписи манифеста ClickOnce (опция в проекте VS2017).
  • Когда задание компиляции запущено, задание регистрируется как condor_usr [1 | 2] с использованием типа входа 2 (интерактивный вход в систему).https://ss64.com/nt/syntax-logon-types.html

logon type

Вещи, которые я пробовал

Если не указано иное, эти действия не имели никакого эффекта и были отменены.

  • Добавление учетных записей condor_usr в группу операторов криптографии.
  • Импорт сертификата с закрытым ключом в хранилище локального компьютера \ личного ключа.
  • Использование PsExec -h make.bat для получения повышенного токена учетной записи.https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
  • Я считал, что контроль учетных записей пользователей (UAC) может препятствовать доступу системной учетной записи и / или учетной записи condor_usr к хранилищу сертификатов (или закрытым ключам в хранилище сертификатов), но UAC уже отключен наВиртуальная машина Win7.
  • Я поместил исходный файл сертификата .pfx в решение VS2017 и нацелил его вместо сертификата в хранилище ключей.Это не имело никакого эффекта, что заставляет меня полагать, что проблема заключается в каком-то разрешении на подпись, а не (или, возможно, в дополнение к) чисто разрешениях вокруг фактического хранилища сертификатов.
  • Я попытался запустить задание при входе в системучерез удаленный рабочий стол, а затем выйдите из сеанса удаленного рабочего стола (фактический выход из системы, а не отключение) до того, как задание перейдет в часть подписиОшибка подписи.
...