Как я могу установить сертификат в локальном хранилище программ с помощью С#?

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

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

Ответы

Ответ 1

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

using (X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine)) 
{
   store.Open(OpenFlags.ReadWrite);
   store.Add(cert); //where cert is an X509Certificate object
}

Ответ 2

Следующие работы подходят для меня:

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();
}

Ответ 3

Вместо установки сертификата в 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();

Ответ 4

Мне пришлось использовать X509KeyStorageFlags. PersistKeySet | X509KeyStorageFlags. Флаги MachineKeySet для устранения ошибки "Keyset не существует", возникшей позже при попытке использовать сертификат:

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();
}

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