2009-02-19 6 views
49

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

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

+0

Btw - я знаю детали Makecert и доверия. Пожалуйста, просто ищите предложения по установке сертификата, используя программный C# или installshield. благодаря! –

+0

любая идея, как это сделать в c-программе? любой API в windows ?? – 2vision2

ответ

53

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

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

Это успешно устанавливает сертификат. Но когда я открываю параметр «Управление приватными ключами» для закрытого ключа в личном хранилище, он дает ошибку «отсутствие ключей для сертификата». – mit

+0

Я предполагаю, что этот ответ теперь недействителен, поскольку X509Store не является одноразовым. –

+0

@mit Вы нашли решение для «нет закрытого ключа для этого сертификата»? – samir105

35

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

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

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

Спасибо. Это было предпочтительнее для меня, поскольку это будет выполняться в самообслуживаемой службе, которая выполняется (несколько экземпляров) во время выполнения. Невозможно предоставить приглашение UAC. Еще раз спасибо! – CodeWarrior

 Смежные вопросы

  • Нет связанных вопросов^_^