Я выдаю себя за учетную запись пользователя службы, чтобы подключиться к веб-сервису, требующему подключения к сертификату. Я установил клиентский сертификат в учетной записи службы на компьютере, на котором запущен код, однако я получаю сообщение об ошибке System.Security.Cryptography.CryptographicException: система не может найти указанный файл.Доступ к хранилищу ключей для олицетворенных пользователей
using (var ctx = new ImpersonationContext("svcAcctUserName", "domain", "password"))
{
var clientCert = new X509Certificate2("filePath", "certPassword");
}
Код олицетворение работает, для краткости я оставил его, но я проверить, чтобы убедиться, что мой контекст переключается пользователем svcAcctUserName, регистрируя Environment.UserName, который показывает, что я бегу, как svcAcctUserName. FilePath верен, и я оставил его, но я открываю и закрываю файл перед тем, как создать объект X509Certificate2, чтобы убедиться, что у меня есть как доступ к файлу, так и правильный путь.
Ошибка запутанна, так как я предоставляю путь в качестве параметра, и я знаю, что пользователь имеет доступ к коду.
EDIT:
также пытались сделать это: How to call a Web service by using a client certificate for authentication in an ASP.NET Web application
Хотя я не использую приложение ASP.NET, я дал ему попробовать в любом случае. Я добавил надстройку сертификатов в mmc, добавил сертификаты «локального компьютера», а затем импортировал сертификат в личный хранилище локального компьютера.
Я побежал:
WinHttpCertCfg.exe -g -c LOCAL_MACHINE\My -s issuedToName -a domain\svcAcctUserName
попытался запустить операцию снова, по-прежнему та же проблема.
Что мне не хватает?
Как вы работаете на веб-сервисе? Установлен ли сертификат в хранилище ключей или находится только в файловой системе? – Brian
Он находится в хранилище личных ключей выданной учетной записи службы и в хранилище ключей local_machines с разрешением, предоставленным для доступа к ней через олицетворенного пользователя. См. Ниже, что я пробовал. – Bitfiddler
Ваш образец показывает вызов конструктора для X509Certificate2, который использует путь к файлу, но вы говорите о сертификате в магазине ... Пожалуйста, выровняйте свой вопрос и пример кода, чтобы поговорить об одном и том же. –