У меня есть виртуальная машина под управлением Windows Server 2019 Datacenter Core, на которой работает агент сборки Jenkins в качестве неинтерактивной службы с собственной локальной учетной записью пользователя (.\строить
).
Теперь я хотел бы добавить подпись кода. Чтобы иметь хоть какое-то подобие безопасности, я хочу использовать виртуальную смарт-карту, основанную на криптографических операциях на хосте, поэтому злоумышленнику, заинтересованному в копировании ключевого материала, необходимо будет выйти из виртуальной машины.
Я настроил виртуальный USB-считыватель CCID с постоянно вставленной картой, и он отображается в Windows:
PS> Получить-PnpDevice
...
Ошибка SmartCardReader Microsoft Usbccid Smartcard Reader (WUDF) USB\VID_08E6...
...
Во-первых, Ошибка
состояние касается. Я применил это исправление, что, кажется, немного улучшило ситуацию (карта появляется ХОРОШО
сразу после загрузки), но это не кажется постоянным.
Однако проблема, в которой я действительно застрял, - это модель безопасности для доступа к смарт-картам. Большая часть документации, которую я смог найти, касается использования смарт-карты для входа в систему, для которой политика проста: пользовательский интерфейс входа в систему имеет доступ к карте для проверки учетных данных, а затем передает этот доступ сеансу пользователя.
Однако в моем случае у меня есть неинтерактивный вход в систему, который не связан с рабочим столом. Когда я вручную запускаю SCardSvr
и ScDeviceEnum
сервисы, я не могу получить доступ к карте даже как Администратор при входе в систему через SSH:
Диспетчер ресурсов смарт-карт Microsoft не запущен.
SCardAccessStartedEvent: служба находится в неизвестном состоянии.
CertUtil: команда -SCInfo FAILED: 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED)
CertUtil: Доступ запрещен.
что логично, а из локальной консоли, как Администратор, я получаю
PS> certutil -scinfo
Диспетчер ресурсов смарт-карт Microsoft работает.
Текущий статус считывателя/карты:
SCardEstablishContext: Диспетчер ресурсов смарт-карт не запущен. 0x8010001d (-2146435043 SCARD_E_NO_SERVICE)
Ошибка SCardEstablishContext для области пользователя.
Две службы также прекращают работу сами по себе через две минуты.
Вопросы:
- Как я могу убедиться, что эмулируемая смарт-карта видна как вставленная, и, возможно, вывести список содержащихся в ней сертификатов?
- Как я могу дать пользователю разрешение на доступ к смарт-карте (
certutil -scinfo
вероятно, покажет это)?
- Как я могу импортировать сертификат, который уже существует на смарт-карте, в хранилище ключей локального пользователя? Нужен ли мне оригинальный сертификат P7 или я могу взять его с самой карты?
- Нужно ли мне что-то делать, чтобы служба работала непрерывно, или решение проблем с доступом также позволит запустить ее по требованию?