2011-10-10 42 views
7

C# kodunu kullandığımızda, X509Certificate2 dosyasını .p12 dosyası ile oluşturuyoruz. Biz olarak sertifikasından özel anahtarı almak istiyorum, ŞimdiÖzel anahtarı X509Certificate nesnesinden dışa aktar

x509Certificate2.PrivateKey 

:

X509Certificate2 x509Certificate2 = new X509Certificate2 
("...\\MyCerificate.p12", "[email protected]", X509KeyStorageFlags.Exportable); 

biz takip ederek AsymmetricAlgorithm biçimi olarak özel anahtarı almak: aşağıda gösterildiği gibi Biz de ihraç edilebilir olarak işaretlenmiş Base64
formatı - ancak bunun nasıl yapılacağı konusunda hiçbir fikrimiz yok ve bizim için çok önemli.

+0

Base64 çıkışını ne ile kullanmaya çalışıyorsunuz? Bu sıkı bir ihtiyaç ya da tercih mi? –

cevap

2

X509Certificate2'nin PrivateKey özelliğini kullanabilirsiniz. fiili döndü özel anahtar uygulama sertifikasında kullanılan algoritma bağlıdır - genellikle bu RSA şudur: ExportParameters özelliği var dan

rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey; 

Sonrasında RSA anahtarı bilgi almak mümkün olmalıdır. tek sorunun özel anahtar Base64 kodlanmış almak için ise

+0

ve anahtar bilgisini (örneğin RSA-PKCS1-KeyEx) bildiğimiz zaman, özel anahtarı base64'e nasıl dönüştürebiliriz? – RRR

-3

, sadece böyle yapabilirsiniz:

var privateKey = x509Certificate2.PrivateKey; 
var encoding = new System.Text.ASCIIEncoding(); 
var base64String = Convert.ToBase64String(encoding.GetBytes(privateKey.ToString())); 
+2

privateKey.ToString() "System.Security.Cryptography.RSACryptoserviceProvider" değerini döndürür ....., bu özel anahtar değildir ... – RRR

+0

@RRR doğrudur. X509Certificate2.PublicKey.Key.ToString() öğesinin bu şekilde * aynı * değeri döndüreceğini göreceksiniz. Bu doğru olamaz :) – rdev5

3

önemli soru neden base64 mı?

Bu, kendi uygulamanız içinse, özel anahtarı bir XML dizesi olarak saklayabilirsiniz (çok daha kolay :-).

string xml = x509Certificate2.PrivateKey.ToXmlString (true); 

Eğer o zaman her byte[] concat anahtarı (RSAParameters) ihracat ve base64 dizesine birleştirilmiş çıkışını açabilirsiniz (sadece uygulamanız için tekrar)base64 istiyorum.

Ama sen (base64 dize içinde) biçiminde bilmek gerekir ardından base64 özel anahtarı gerektirmektedir diğer uygulamalarla birlikte çalışma istiyorum. Örneğin. Çoğu durumda, özel anahtarlar PEM kodludur (özel bir üstbilgi/altbilgiye sahip base64, X509Certificate için bkz example).

Aradığınızı bu şekilde arıyorsanız, önce özel anahtarı bir PKCS#8 yapısında kodlamanız, ardından base64 içine dönmeniz ve üstbilgi/altbilgi eklemeniz gerekir. inside Mono.Security.dll (Mono projesinden MIT.X11 lisanslı kodu) yapmak için bazı yararlı kodlar bulabilirsiniz.

+0

Ben base64 özel anahtar almak için gereken diğer uygulamaya bağlı. Kullanıcının X509Certificate2'yi eklemesine izin vermek istiyorum ve kendim de 64 anahtar olarak özel anahtarı ayıklamak istiyorum. Net framework bunu yapmanın herhangi bir yolunu ortaya çıkarır mı? – RRR

+0

HAYIR, eğer yaptıysa (bundan şüpheliyim) ya da biliyor olsaydım cevaplarıma dahil ederdim.Sorunuzun devam ettiği söyleniyor, bu bir ** base64 ** meselesi değil, bunun ** içeride ** diğer uygulamalarınızla etkileşime girmesinin önemli olduğunu biliyor. – poupou