Я не думаю, что вы можете импортировать сертификаты в личное хранилище другого пользователя. Я бы порекомендовал добавить его в хранилище машины и предоставить пользователю службы доступ к сертификатам / ключам. Вы также можете попробовать войти в систему / запустить пользователя службы и добавить его таким образом, но я никогда этого не пробовал.
Изменить: я подтвердил это после тестирования, хотя я не уверен, что это ожидаемое поведение из-за плохой документации certutil. certutil.exe -store -service (имя_хранилища)
Кажется, это правильный синтаксис для доступа к сертификатам в хранилище услуг. Сервисный центр находится по адресу: г. HKLM\SOFTWARE\Microsoft\Cryptography\Services\(ServiceName)\
в реестре, но certutil вставляет SID текущего пользователя вместо имени службы при поиске следующим образом: HKLM\Software\Microsoft\Cryptography\Services\(SID)\SystemCertificates\
, что приводит к сбою поиска. Вы можете переопределить SID с помощью -сид
параметр, но, похоже, он не работает, если вы укажете имя службы. Если вы ищете SID службы с помощью sc.exe показывает идентификатор (ServiceName)
и подключите его, он говорит: «Имя пользователя или пароль неверны». Кажется, что certutil поддерживает только пару известных SID (я даже пытался преобразовать SID службы в числовую форму). Если вы хотите воспроизвести мою работу, вам нужно запустить Procmon.
Итак, обнаружив это, я собираюсь предположить, что вы можете импортировать сертификаты только в том случае, если вы запускаете certutil в контексте службы. Кажется, самый простой способ решить вашу проблему - либо
- вручную редактировать реестр
- хранить сертификаты в машинном хранилище и давать им разрешения службы
- хранить сертификаты в пользовательском хранилище пользователя, которого служба запускает как