2016-03-31 13 views
1

Ich Umwandlung Teil an verwalteten Code dieses Batch-Befehl:ein CERT Installieren Schlüssel mit einem privaten

"%~dp0\makecert" -r -pe -n "CN=CompanyName" -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 "%~dp0\server.cer" 

Dies schafft nicht nur das CERT, aber es installiert auch sie.

Wenn das Zertifikat installiert ist, sieht wie folgt aus:

enter image description here

Jetzt auch ich versuche, die private cert zu erhalten bei der Installation von verwalteten Code verwenden.

Dies ist, was ich bisher:

/// <summary> 
///  Install the root authority certificate 
/// </summary> 
/// <param name="fileName"></param> 
private static void InstallRootAuthority(string fileName) 
{ 
    var cert = new X509Certificate2(X509Certificate.CreateFromCertFile(fileName)); 
    var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadWrite); 
    store.Add(cert); 
    store.Close(); 
} 

Wie kann ich den privaten Schlüssel auch hinzufügen?

+0

Ich bin mir ziemlich sicher, dass Ihr Code gültig ist. Sind Sie 100% sicher, dass das Zertifikat unter 'fileName' einen privaten Schlüssel enthält? Normalerweise, wenn eine Zertifikatsdatei einen privaten Schlüssel enthält, ist sie passwortgeschützt und ich sehe kein Passwort. – GuyMontag

+0

Auch ein anderes Ding verstehe ich nicht ganz: Ihre Methode heißt 'InstallRootAuthority', aber Sie installieren es in' StoreName.My'. Üblicherweise gehören Wurzelzertifikate zu "StoreName".Root ", andernfalls werden Client-Zertifikate und Server-Zertifikate nicht automatisch verifiziert. Hast du das absichtlich gemacht? – GuyMontag

Antwort

0

Um dies zu erreichen, müssen Sie eine .pfx-Datei verwenden (von der ich glaube, dass sie nicht nur das Zertifikat, sondern auch den privaten Schlüssel enthält).

Also hier ist was ich getan habe.

  1. Generieren Sie die cert MakeCert.exe wie folgt aus:

"% ~ dp0 \ makecert" -r -pe -n "CN = Company" -SS meine -sr Localmachine - Himmel Austausch -SP "Microsoft RSA SChannel Cryptographic Provider" -sy 12 "% ~ dp0 \ server.cer" -sv Server.pvk

Hinweis am Ende, die Server.pvk -sv (das ist der private Schlüssel).

  1. pvk2pfx.exe -pvk Server.pvk -spc server.cer -pfx Server.pfx

Dies veranlasste mich, ein Passwort und ich ausgewählt Keine. Der Versuch, ein Passwort einzugeben, führte dazu, dass schlimme Dinge passierten.

  1. Jetzt in Ihrem Code wie folgt anpassen:

    Privat static void InstallRootAuthority (string filename) { var cert = new X509Certificate2 (filename, string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet); var store = neuer X509Store (StoreName.My, StoreLocation.LocalMachine); store.Open (OpenFlags.ReadWrite); store.Add (cert); store.Close(); }

Excuse Formatierung, aber Stackoverflow-Formatierung wurde zum Zeitpunkt der Beantwortung gebrochen.

Verwandte Themen