Konvertieren Sie Zertifikat und Privaten Schlüssel auf .PFX-Programm in C#

Habe ich eine .cer-Datei der Ausgabe von einem erfolgreichen LetsEncrypt Zertifikat-Anfrage.

Habe ich die ursprüngliche Private Schlüssel verwendet, um erstellen Sie die Certificate Signing Request (CSR) für LetsEncrypt.

Nun müssen wir programmatisch kombinieren Sie diese beiden Dateien in eine PFX-bundle für IIS verwenden .NET

Da wir versuchen, programmgesteuert pvk2pfx ist nicht praktisch, und wir möchten vermeiden, dass openssl, wenn möglich.

Demonstrieren, aber wir werden versuchen, zu replizieren, diese Funktion aber mit CS .NETTO-statt pvk2pfx:
pvk2pfx.exe -pvk-Server.pvk -spc-Server.cer -pfx-Server.pfx

Habe ich recherchiert, ausführlich und hier sind die Möglichkeiten, die ich sehe:

Einer Methode zu sein scheint, mit X509Certificate2 etwas wie:

//Import the certficate
X509Certificate2 cert = new X509Certificate2("c:\\cert.cer");

//Import the private key
X509Certificate2 cert = new X509Certificate2("c:\\key.pvk");

//Or import the private key - Alternative method
X509DecryptString(token, @"c:\CA.pvk", "mypassword");

//Export the PFX file
certificate.Export(X509ContentType.Pfx, "YourPassword");
File.WriteAllBytes(@"C:\YourCert.pfx", certificateData);

Hier sind einige andere Methoden, aber alle von Ihnen scheinen für das auslassen der Teil über den Privaten Schlüssel oder die Sie benötigen pvk2pfx.exe

Umwandlung von cert-Datei pfx-Datei
https://stackoverflow.com/a/4797392/3693688

So erstellen Sie ein X509Certificate2-programmatisch?
http://www.wiktorzychla.com/2012/12/how-to-create-x509certificate2.html

Auswählen, Erstellen und Finden X509-Zertifikate:
http://www.wou.edu/~rvitolo06/WATK/Demos/HPCImageRendering/code/ImageRendering/AppConfigure/CertHelper.cs

Nicht exportieren erzeugte Zertifikat mit privaten Schlüssel zu byte array
Nicht export generierte Zertifikat mit privaten Schlüssel zu byte-array in .net 4.0/4.5

Programmgesteuert importieren einer pfx-mit einer Kette der Zertifikate in den Zertifikatspeicher.
https://stackoverflow.com/a/9152838/3693688

Importieren .cer und .pvk-Zertifikat-Dateien programmgesteuert in C# für die Verwendung mit netsh http add sslcert
https://gist.github.com/BrandonLWhite/235fa12247f6dc827051

Methode zum konvertieren von cer pfx-cert
https://gist.github.com/domgreen/988684

Jede Hilfe sehr dankbar 🙂


BEARBEITEN 1

CryptoGuy schlug vor, wir müssen diesen link:
https://gist.github.com/BrandonLWhite/235fa12247f6dc827051

Bedeutet das, dass sowas gut wäre?

Sind die CSP-Teile notwendig?

Dank!

using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;

    var PublicKey = AssemblyUtility.GetEmbeddedFileAsByteArray("Cert.cer");
    var PrivateKey = AssemblyUtility.GetEmbeddedFileAsByteArray("PrivateKey.pvk");
    var certificate = new X509Certificate2(PublicKey, string.Empty, 
        X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
    var cspParams = new CspParameters
    {
        ProviderType = 1,
        Flags = CspProviderFlags.UseMachineKeyStore,
        KeyContainerName = Guid.NewGuid().ToString().ToUpperInvariant()
    };
    var rsa = new RSACryptoServiceProvider(cspParams);

    rsa.ImportCspBlob(ExtractPrivateKeyBlobFromPvk(PrivateKey));
    rsa.PersistKeyInCsp = true;
    certificate.PrivateKey = rsa;

    certificate.Export(X509ContentType.Pfx, "YourPassword");
    File.WriteAllBytes(@"C:\YourCert.pfx", certificateData);
  • Einer deiner links (gist.github.com/BrandonLWhite/235fa12247f6dc827051) sieht die richtige Wahl für Sie.
  • Dank CryptoGuy
  • Ja, CSP-Teile sind Pflicht, denn es ist die einzige unterstützte Methode für das arbeiten mit asymmetrischer Kryptographie in Windows. In kurzen, müssen Sie zum laden einen privaten Schlüssel-Datei (die ist entweder, PKCS#1, PKCS8 oder was auch immer) zu einem LSP, und assoziieren Sie ihn mit ein X509Certificate2-Objekt.
  • Interessant, danke! Wie das aussieht, könnte das sein, was wir vermissten vor. Stimmt das Zertifikat.Export(X509ContentType.Pfx...) ein Teil der rechten Aussehen? Ich habe kopiert, die aus einer anderen Quelle und entfernt den Befehl netsh und sCertHash Teile, da ich denke, das brauchen wir nicht, wenn wir nur sparen, um eine pfx-Datei?
  • netsh Teil ist eine andere Geschichte (Sie brauchen nicht diese). Alles, was Sie brauchen, ist, um die ExtractPrivateKeyBlobFromPvk Methode (ich weiß nicht, wo Sie es bekommen), die im code verwendet wird. Ich würde vermuten, dass sein code nur konvertiert PKCS#1/PKCS#8 private-key zu CryptoAPI private key blob: msdn.microsoft.com/en-us/library/windows/desktop/...
  • Etwas wie das vielleicht? Systemadministratoren.lv/blog-de/...
  • Lassen Sie uns weiter, diese Diskussion im chat.
  • Was ist ExtractPrivateKeyBlobFromPvk? sehen immer diesen gleichen Ausschnitt in anderen Artikeln, aber keine Erwähnung von wo/was ExtractPrivateKeyBlobFromPvk ist.

InformationsquelleAutor Marcus | 2016-02-15
Schreibe einen Kommentar