Рейтинг:1

Как установить разрешения для хранилища сертификатов службы?

флаг cz

У меня есть служба, которая требует доступа к собственному хранилищу сертификатов, но получает отказ в доступе.

Я проверил с помощью mmc и оснастки «Сертификаты» для службы, и хранилище существует и содержит сертификаты. Однако в оснастке я не могу видеть или устанавливать разрешения.

Я попытался сбросить сертификаты (для теста, позже для изменения разрешений) с помощью certutil, но я продолжаю получать сообщение FAILED с «Неверный параметр». Синтаксис, который я использую,

certutil -service -store имя_службы\мой

Имя службы — это имя моей службы, а «мой» правильно определяется certutil как имя «личного» хранилища службы. Я знаю, что магазин существует, так как mmc показывает его.

Что я делаю не так с certutil?

Рейтинг:2
флаг cn

Я не думаю, что вы можете импортировать сертификаты в личное хранилище другого пользователя. Я бы порекомендовал добавить его в хранилище машины и предоставить пользователю службы доступ к сертификатам / ключам. Вы также можете попробовать войти в систему / запустить пользователя службы и добавить его таким образом, но я никогда этого не пробовал.

Изменить: я подтвердил это после тестирования, хотя я не уверен, что это ожидаемое поведение из-за плохой документации 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 в контексте службы. Кажется, самый простой способ решить вашу проблему - либо

  1. вручную редактировать реестр
  2. хранить сертификаты в машинном хранилище и давать им разрешения службы
  3. хранить сертификаты в пользовательском хранилище пользователя, которого служба запускает как
flashbang avatar
флаг cn
Потенциально связано - https://serverfault.com/questions/450831/remove-a-certificate-from-the-windows-network-service-certificate-store?rq=1
флаг cz
Нет, это не то. Я не хочу импортировать сертификаты в личное хранилище другого пользователя. (На самом деле в вопросе не упоминается ни импорт, ни магазин другого пользователя.) Речь идет о служебных хранилищах (не служебных хранилищах пользователей), которые mmc может просматривать, но certutil, по-видимому, не может.
flashbang avatar
флаг cn
Привет @AndrewJ.Brehm - я обновил свой ответ некоторыми исследованиями, которые, как мне кажется, подтверждают мою первоначальную теорию.
флаг cz
Интересные наблюдения. Но как я могу работать в контексте службы, а не в контексте учетной записи службы?
flashbang avatar
флаг cn
Хороший вопрос, один из способов, который я могу придумать, - это использовать psexec. Кажется, он поддерживает флаг `-r`, который позволяет вам взаимодействовать со службой, но это может не сработать, так как я думаю, что psexec работает как отдельная служба. Вы также можете попробовать что-то в PowerShell, например: `New-PSDrive MySvcCert -PSProvider Certificate -Root '(ServiceName)\My'`, а затем `cd MySvcCert:`, но я никогда этого не делал.
SamErde avatar
флаг gg
Вы пытались использовать «известный SID» локальной группы администраторов или ЛОКАЛЬНОЙ СИСТЕМЫ?
flashbang avatar
флаг cn
@SturdyErde Я попробовал один из известных поддерживаемых им SID (сетевая служба - 24), и он вставил полный SID S-1-5-20. Не хотелось проверять другие, но я предполагаю, что это будет похоже. Два других, которые он поддерживает, — это 22 и 23 для локальной системы/локальной службы.
флаг cz
Это все еще сиды для аккаунтов.Здесь мне нужен доступ к хранилищу сертификатов службы, а не к конкретной учетной записи (и не к учетной записи службы).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.