Задний план
У меня есть виртуальная машина Windows 7 с двумя учетными записями пользователей (condor_usr1 и condor_usr2), которые используются для компиляции исходного кода. Учетные записи condor_usr[1|2] являются членами группы администраторов. У меня есть главная виртуальная машина HTCondor, которая периодически получает задания и назначает каждое задание для запуска на одной из учетных записей condor_usr[1|2]. Служба condor на виртуальной машине Win7 работает как локальная системная учетная запись, но выполняемые задания на самом деле выполняются как учетная запись condor_usr[1|2].
У меня есть новое требование подписать скомпилированный исполняемый файл. Я импортировал сертификат с закрытым ключом в хранилище ключей Current User\Personal в хранилище сертификатов 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.
Включил ведение журнала аудита и обнаружил следующий журнал, который произошел одновременно с ошибкой подписи.
Цель
Подпишите скомпилированный исполняемый файл успешно независимо от того, под какой учетной записью выполняется компиляция, и без необходимости входа пользователя в систему.
Что я понял до сих пор
- Компилируемый код/проект является решением Visual Studio 2017.
- Метод подписи — подписание манифеста ClickOnce (опция в проекте VS2017).
- При запуске задания компиляции оно регистрируется как condor_usr[1|2], используя тип входа 2 (интерактивный вход). https://ss64.com/nt/syntax-logon-types.html
Вещи, которые я пробовал
Если не указано иное, эти действия не имели никакого эффекта и были отменены.
- Добавление учетных записей condor_usr в группу операторов шифрования.
- Importing the certificate w/ private key to the Local Computer\Personal key store.
- Granting the Network Service account full control to the certificate/private key. https://community.dynamics.com/nav/b/technicaltipsandtricksfordynamicsnav/posts/how-to-grant-access-to-the-certificate-s-private-key-to-the-service-account-for-microsoft-dynamics-nav-server
- Использование
PsExec -h make.bat
для получения токена учетной записи с повышенными правами. https://docs.microsoft.com/en-us/sysinternals/downloads/psexec - Я подумал, что контроль учетных записей (UAC) может препятствовать доступу системной учетной записи и/или учетной записи condor_usr к хранилищу сертификатов (или закрытым ключам в хранилище сертификатов), но UAC уже отключен на виртуальной машине Win7.
- Я поместил исходный файл сертификата .pfx в решение VS2017 и нацелил его вместо сертификата в хранилище ключей. Это не имело никакого эффекта, что наводит меня на мысль, что проблема заключается в каком-то разрешении на подпись, а не (или, возможно, в дополнение) к чистому разрешению для фактического хранилища сертификатов.
- Я попытался запустить задание, войдя в систему через удаленный рабочий стол, а затем выйти из сеанса удаленного рабочего стола (фактический выход из системы, а не отключение), прежде чем задание перейдет к части подписания. Подписание не удалось.
%windir%\system32\config\systemprofile\desktop
и%windir%\syswow64\config\systemprofile\desktop
(только для 64-битной ОС) - person Kul-Tigin   schedule 03.10.2019desktop
будет использоваться. Стоит попробовать. Если вы выполните поиск по этим путям в Интернете, вы увидите много сообщений, говорящихhow those paths relate to the problem, but it worked
. - person Kul-Tigin   schedule 03.10.2019