Фон
У меня есть виртуальная машина 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](https://i.stack.imgur.com/SzQLr.png)
Цель
Успешно подписать скомпилированный исполняемый файл независимо от того, под какой учетной записью выполняется компиляция, и не требуяпользователь должен войти в систему.
Что я понял до сих пор
- Скомпилированный код / проект является решением Visual Studio 2017.
- Подписаниеметод подписи манифеста ClickOnce (опция в проекте VS2017).
- Когда задание компиляции запущено, задание регистрируется как condor_usr [1 | 2] с использованием типа входа 2 (интерактивный вход в систему).https://ss64.com/nt/syntax-logon-types.html
![logon type](https://i.stack.imgur.com/ZLT4V.png)
Вещи, которые я пробовал
Если не указано иное, эти действия не имели никакого эффекта и были отменены.
- Добавление учетных записей condor_usr в группу операторов криптографии.
- Импорт сертификата с закрытым ключом в хранилище локального компьютера \ личного ключа.
- Использование
PsExec -h make.bat
для получения повышенного токена учетной записи.https://docs.microsoft.com/en-us/sysinternals/downloads/psexec - Я считал, что контроль учетных записей пользователей (UAC) может препятствовать доступу системной учетной записи и / или учетной записи condor_usr к хранилищу сертификатов (или закрытым ключам в хранилище сертификатов), но UAC уже отключен наВиртуальная машина Win7.
- Я поместил исходный файл сертификата .pfx в решение VS2017 и нацелил его вместо сертификата в хранилище ключей.Это не имело никакого эффекта, что заставляет меня полагать, что проблема заключается в каком-то разрешении на подпись, а не (или, возможно, в дополнение к) чисто разрешениях вокруг фактического хранилища сертификатов.
- Я попытался запустить задание при входе в системучерез удаленный рабочий стол, а затем выйдите из сеанса удаленного рабочего стола (фактический выход из системы, а не отключение) до того, как задание перейдет в часть подписиОшибка подписи.