Как программно установить сертификат в локальное хранилище компьютеров с помощью c #? - PullRequest
53 голосов
/ 19 февраля 2009

У меня есть сертификат, сгенерированный через MakeCert. Я хочу использовать этот сертификат для безопасности сообщений WCF с помощью PeerTrust. Как программно установить сертификат в хранилище сертификатов локального компьютера «доверенные лица» с помощью c # или .NET?

У меня есть файл CER, но я также могу создать PFX.

Ответы [ 4 ]

58 голосов
/ 19 февраля 2009

Я считаю, что это правильно:

using (X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine)) 
{
   store.Open(OpenFlags.ReadWrite);
   store.Add(cert); //where cert is an X509Certificate object
}
38 голосов
/ 11 сентября 2009

Для меня хорошо работает следующее:

private static void InstallCertificate(string cerFileName)
{
    X509Certificate2 certificate = new X509Certificate2(cerFileName);
    X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine);

    store.Open(OpenFlags.ReadWrite);
    store.Add(certificate);
    store.Close();
}
7 голосов
/ 13 сентября 2013

Вместо установки сертификата в LocalMachine, который требует повышенных привилегий, вы можете добавить его в «CurrentUser» (работает для меня).

X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
store.Add(cert); //where cert is an X509Certificate object
store.Close();
1 голос
/ 05 июля 2018

Мне пришлось использовать X509KeyStorageFlags. PersistKeySet | X509KeyStorageFlags. MachineKeySet флаги для разрешения «Набор ключей не существует» Ошибка, возникшая позже при попытке использовать сертификат:

X509Certificate2 certificate = new X509Certificate2(pfxPath, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
     store.Open(OpenFlags.ReadWrite);
     store.Add(certificate);
     store.Close();
}

Благодаря этой статье: Закрытый ключ сертификата в хранилище сертификатов не читается

...