2012-02-04 13 views
8

नमूना कोड नहीं मिली:RSACryptoServiceProvider से एक X509Certificate2 बनाएं साथ विफल अनुरोध किया वस्तु

 CspParameters cspParameters = new CspParameters(); 
     cspParameters.ProviderType = 1; // PROV_RSA_FULL 

     // Create the crypto service provider, generating a new 
     // key. 
     mRsaCSP = new RSACryptoServiceProvider(mDefaultKeyLength, cspParameters); 
     mRsaCSP.PersistKeyInCsp = true; 
     RSAParameters privateKey = mRsaCSP.ExportParameters(true); 


     byte[] rsaBytes = mRsaCSP.ExportCspBlob(true); 

     try 
     { 
      X509Certificate2 cert = new X509Certificate2(rsaBytes);     
      mKeyDataPfx = Convert.ToBase64String(cert.Export(X509ContentType.Pkcs12, password)); 
     } 
     catch (Exception ce) 
     { 
      string error = ce.Message; 
     } 
+0

एक आरएसए कुंजी सीधे X509 प्रमाणपत्र के साथ संगत नहीं है। एक एक्स 50 9 सर्टिफिकेट को जारीकर्ता द्वारा हस्ताक्षरित कुंजी की आवश्यकता होती है, भले ही यह स्वयं हस्ताक्षरित हो। क्या आप हमें बता सकते हैं कि आप वास्तव में क्या करने की कोशिश कर रहे हैं? क्या आप गतिशील रूप से कोड में X509 प्रमाणपत्र बनाने की कोशिश कर रहे हैं? –

+1

हां। यही वही है जो मैं करने की कोशिश कर रहा हूं। विचार यह है कि मेरे पास RSACryptoServiceProvider.ToXmlString (true) के साथ स्ट्रिंग के रूप में संग्रहीत पुराने आरएसए प्रमाण पत्र हैं। उन्हें पीएफएक्स फाइलों के रूप में पढ़ने और निर्यात करने की आवश्यकता होगी। नए आरएसए प्रमाणपत्रों को पीएफएक्स फाइलों के रूप में उत्पन्न और संग्रहीत करने की आवश्यकता होगी। – chiefbrownbotom

+0

मेरा सुझाव है कि आप बाउंसी कैसल .NET स्रोत कोड और उदाहरण देखें। मुझे लगता है कि उदाहरण bccrypto-net-1.7-src \ csharp \ crypto \ test \ src \ pkcs \ example \ PKCS12Example.cs आपको प्रारंभ करना चाहिए। http://www.bouncycastle.org/csharp/ –

उत्तर

2

यहाँ मेरी समाधान है, BouncyCastle लाइब्रेरी का उपयोग कर।

// create the RSA key from an XML string 
RSACryptoServiceProvider key = new RSACryptoServiceProvider(); 
key.FromXmlString(keyTextBox.Text); 

// convert to BouncyCastle key object 
var keypair = DotNetUtilities.GetRsaKeyPair(key); 

var gen = new X509V3CertificateGenerator(); 

string certName = Path.GetFileNameWithoutExtension(fileName); 
var name = new X509Name("CN=" + certName); 
var serial = BigInteger.ProbablePrime(120, new Random()); 

gen.SetSerialNumber(serial); 
gen.SetSubjectDN(name); 
gen.SetIssuerDN(name); 
gen.SetNotAfter(DateTime.Now.AddYears(10)); 
gen.SetNotBefore(DateTime.Now); 
gen.SetSignatureAlgorithm("MD5WithRSA"); 
gen.SetPublicKey(keypair.Public); 

// generate the certificate 
var newCert = gen.Generate(keypair.Private); 
// convert back to .NET certificate 
var cert = DotNetUtilities.ToX509Certificate(newCert); 
// export as byte array 
byte[] certData = cert.Export(X509ContentType.Pfx); 

File.WriteAllBytes(fileName, certData); 
संबंधित मुद्दे