2009-02-19 10 views
49

MakeCert ile oluşturulan bir sertifikam var. Bu sertifikayı PeerTrust kullanarak WCF mesaj güvenliği için kullanmak istiyorum. Sertifikayı C# veya .NET kullanarak "güvenilir kişiler" yerel makine sertifika deposuna nasıl programlayabilirim?Sertifika yerel makine deposuna program aracılığıyla C# kullanarak nasıl yükleyebilirim?

Bir CER dosyasına sahibim, ancak bir PFX de oluşturabilirim.

+0

Btw - Makecert ve güvenin ayrıntılarını biliyorum. Lütfen, sadece programatik C# veya installshield kullanarak sertifikayı yükleme önerileri arıyorum. Teşekkürler! –

+0

herhangi bir fikrin c programında nasıl yapılır ?? Windows'da herhangi bir API? – 2vision2

cevap

53

Bu doğru olduğuna inanıyoruz:

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

Bu sertifikayu başarıyla yükler, Ancak kişisel depoda özel anahtar için Özel Anahtarları Yönet seçeneğini açtığımda "sertifika için anahtar bulunamadı" hatası verir. – mit

+0

Bu cevabı tahmin ediyorum, şimdi X509Store tek kullanımlık olmadığı için geçersiz. –

+0

@mit "bu sertifika için özel anahtar bulunamadı" için bir çözüm buldunuz mu? – samir105

35

aşağıdaki benim için iyi çalışır:

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

yerine yükseltilmiş ayrıcalıklar gerektirir LocalMachine için sertifika yükleme onu eklemek olabilir "CurrentUser " (benim için çalışıyor).

X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadWrite); 
store.Add(cert); //where cert is an X509Certificate object 
store.Close(); 
+0

Bunun için teşekkürler. Bu benim için tercih edildi çünkü bu, çalışma zamanında çalıştırılan (birden çok örnek) kendiliğinden barındırılan bir hizmette çalışıyor olacaktı. UAC komutunu sağlamanın bir yolu yok. Tekrar teşekkürler! – CodeWarrior