Доступ к сертификатам x509 в хранилищах сертификатов службы Windows с помощью C # - PullRequest
3 голосов
/ 27 января 2012

Я хотел бы сохранить сертификат x509 для использования службой Windows.У меня проблема, где хранить этот сертификат.С помощью оснастки сертификата консоли управления Microsoft (mmc) можно создать хранилища сертификатов для конкретных служб Windows.Проблема в том, что я не могу понять, как получить эти сертификаты через C #.

  • Установлен сертификат в хранилище сервисов с использованием mmc и оснастки сертификата.

Создал и установил службу Windows, используя topshelf с этим кодом:

var localStore = new X509Store(StoreLocation.LocalMachine); 
localStore.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 c in localStore.Certificates)
{
    _log.Debug("local: certificate for {0} - has private key {1}".ToFormat(c.SubjectName.Name, c.HasPrivateKey));
}

var userStore = new X509Store(StoreLocation.CurrentUser); 
userStore.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 c in userStore.Certificates)
{
    _log.Debug("user: certificate for {0} - has private key {1}".ToFormat(c.SubjectName.Name, c.HasPrivateKey));
}

Никогда не вижу сертификат в хранилище службы Windows.Если я добавлю сертификат в хранилище сертификатов локального компьютера, служба Windows увидит этот сертификат.

Все эти модные инструменты в mmc для добавления сертификатов в сервисные хранилища должны иметь цель.

1 Ответ

3 голосов
/ 27 января 2012

Служба windows работает под другой учетной записью пользователя, чем при запуске MMC, поэтому вы не видите сертификат в хранилище CurrentUser;но посмотрите на это в хранилище LocalMachine.

Один из способов решения этой проблемы - запустить службу windows в качестве определенного пользователя, скажем, «ServiceX».Затем вы запускаете MMC как «ServiceX» и добавляете сертификат в текущее хранилище пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...