У меня есть сертификат, который необходимо импортировать в Сертификаты/доверенные корневые центры сертификации и имеет соответствующий закрытый ключ.
Чтобы получить доступ к ключу из кода, вам необходимо установить права доступа к секретному ключу, чтобы предоставить полный доступ к определенному пулу приложений IIS. Я полностью понимаю это, но проблема в том, что это можно установить только в личных сертификатах и не доверять корневым.
Я попытался добавить тот же сертификат в Личный хранилище, и следующий код не сломается:
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 cert in store.Certificates)
{
if (cert.HasPrivateKey)
{
// access private key here
}
}
store.Close();
Настройка разрешений на сертификат в личном хранилище работает, если я изменяю StoreName.Root
на StoreName.My
. Я могу получить к нему доступ. Но я не могу получить доступ к нему в корне. Он просто говорит:
Ключ не существует
Любые предложения?
Дополнительная информация
Если я установил идентификаторы пулов приложений в Локальная система (у которых есть общие права доступа к моей машине), я могу успешно получить доступ к закрытому ключу. Поэтому основной вопрос заключается в том, как установить права доступа к идентификатору пула приложений для доступа к закрытым ключам для сертификатов в хранилище доверенных корней.
Почему доверенное корневое хранилище, а не личное?
У меня есть готовая сборка, которая обращается к этому сертификату в этом конкретном магазине, поэтому простое размещение сертификата в Личном магазине не будет делать трюк для меня. Поэтому необходимо установить доверительные разрешения для закрытых ключей доверенных корневых сертификатов.