Я разрабатываю промежуточное программное обеспечение службы Windows, которое использует сертификаты безопасности для выполнения аутентификации, когда оно хочет инициализировать безопасный канал связи с удаленными приложениями.
Служба Windows — это приложение .Net 3.5, которое использует (через уровень C ++ / CLI) библиотеку C ++ WinCrypt для загрузки сертификатов. В частности, я вызываю метод CertFindCertificateInStore при доступе к магазину для загрузки сертификата. CertFindCertificateInStore использует «Мое» системное хранилище как хранилище по умолчанию.
Я зарегистрировал свой личный сертификат в системном хранилище «Мой» либо для текущего пользователя (пользователя, вошедшего в систему), либо для локального компьютера через консоль MMC. Будьте уверены, что сертификат хорош, и он включает в себя мой закрытый ключ.
Когда я запускаю службу Windows как текущий пользователь (снова пользователь, вошедший в систему), сертификат загружается правильно, вместо этого сертификат не загружается, когда я запускаю службу как «LocalSystem». Затем возникает ошибка «Невозможно найти объект или свойство», когда я вызываю CertFindCertificateInStore. Я подчеркиваю, что «Мой» магазин вместо этого остается доступным.
(NB. Когда я открываю новый сеанс с использованием другого пользователя и запускаю ту же службу Windows, что и пользователь, для которого я зарегистрировал сертификаты, сертификат снова корректно загружается)
Затем я использовал консоль MMC или системный инструмент winhttpcertcfg.exe, чтобы убедиться, что у пользователя «LocalSystem» есть права на доступ к моему сертификату. После этого консоль MMC и средство winhttpcertcfg.exe подтверждают, что теоретически пользователь «LocalSystem» имеет права на доступ к сертификату.
Есть ли у вас какие-либо предложения, чтобы помочь мне решить эту проблему?
Заранее спасибо за вашу помощь,
PS: аналогичный вопрос был опубликован здесь Сертификаты: не удается найти сертификат и закрытый ключ для расшифровки Ошибка при подписи
Задача ещё не решена.
Других решений пока нет …