public static void WriteCertificateAsPem(byte[] rawBytes, string exportPassword, Stream s) { var a = new Pkcs12Store(); a.Load(new MemoryStream(rawBytes), Array.Empty <char>()); var entry = a.GetCertificate(a.Aliases.Cast <string>().First()); var key = a.Aliases.Cast <string>().Select(a.GetKey).First(x => x != null); using (var writer = new StreamWriter(s, Encoding.ASCII, 1024, leaveOpen: true)) { var pw = new PemWriter(writer); pw.WriteObject(entry.Certificate); object privateKey; if (exportPassword != null) { privateKey = new MiscPemGenerator( key.Key, "AES-128-CBC", exportPassword.ToCharArray(), CertificateUtils.GetSeededSecureRandom()) .Generate(); } else { privateKey = key.Key; } pw.WriteObject(privateKey); writer.Flush(); } }
public void ConvertPfxToPem( string pfxPath, string pfxPassword, string keyPath) { using (Stream stream = File.Open(pfxPath, FileMode.Open)) { Pkcs12Store pkcs = new Pkcs12Store(stream, pfxPassword.ToCharArray()); foreach (string alias in pkcs.Aliases) { if (pkcs.IsKeyEntry(alias) && pkcs.GetKey(alias).Key.IsPrivate) { AsymmetricKeyParameter privateKey = pkcs.GetKey(alias).Key; using (Stream s = new FileStream(keyPath, FileMode.Create)) using (TextWriter textWriter = new StreamWriter(s)) { var generator = new MiscPemGenerator(privateKey); PemWriter pemWriter = new PemWriter(textWriter); pemWriter.WriteObject(generator); textWriter.Flush(); } } } } }
public static void WriteCertificateAsPem(string name, byte[] rawBytes, string exportPassword, ZipArchive s) { var a = new Pkcs12Store(); a.Load(new MemoryStream(rawBytes), Array.Empty <char>()); X509CertificateEntry entry = null; AsymmetricKeyEntry key = null; foreach (var alias in a.Aliases) { var aliasKey = a.GetKey(alias.ToString()); if (aliasKey != null) { entry = a.GetCertificate(alias.ToString()); key = aliasKey; break; } } if (entry == null) { throw new InvalidOperationException("Could not find private key."); } using (var stream = s.CreateEntry(name + ".crt").Open()) using (var writer = new StreamWriter(stream)) { var pw = new PemWriter(writer); pw.WriteObject(entry.Certificate); } using (var stream = s.CreateEntry(name + ".key").Open()) using (var writer = new StreamWriter(stream)) { var pw = new PemWriter(writer); object privateKey; if (exportPassword != null) { privateKey = new MiscPemGenerator( key.Key, "DES-EDE3-CBC", exportPassword.ToCharArray(), CertificateUtils.GetSeededSecureRandom()) .Generate(); } else { privateKey = key.Key; } pw.WriteObject(privateKey); writer.Flush(); } }
private static string ConvertToPemFormat(object input) { var generator = new MiscPemGenerator(input); string certificateString; using (var textWriter = new StringWriter()) { var writer = new PemWriter(textWriter); writer.WriteObject(generator); writer.Writer.Flush(); certificateString = textWriter.ToString(); } if (string.IsNullOrWhiteSpace(certificateString)) { throw new InvalidOperationException(); } return(certificateString); }