2014-07-23 8 views
5

Buon giornoSystem.Security.Cryptography.CryptographicException: Keyset non esiste gettato all'interno di Visual Studio

sto avendo seri problemi che cercano di assegnare una chiave privata a causa di questo errore.

System.Security.Cryptography.CryptographicException: Keyset does not exist

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly); 

var col = store.Certificates.Find(X509FindType.FindBySerialNumber, "00873476DC47C5BB614EA96F2A9CE744A6", false); 
var cert = col[0]; 
var xmlUnSignedSaml = new XmlDocument(); 
xmlUnSignedSaml.LoadXml(assertion); 
xmlUnSignedSaml.PreserveWhitespace = true; 
SignedXml signedXml = new SignedXml(xmlUnSignedSaml); 

signedXml.SigningKey = cert.PrivateKey; //<<<--- Exception thrown. 

ho verificato quanto segue:

  1. il certificato dispone di una chiave privata.
  2. Lettura Le autorizzazioni per il certificato vengono concesse a IUSR, SERVIZIO DI RETE, SERVIZIO LOCALE e contesto utente locale sulla console MMC. Il certificato si trova in localMachine - Cartella personale
  3. Le autorizzazioni Same Read vengono fornite alla cartella machinekeys in "C: \ Documents and Settings \ All Users \ Dati applicazioni \ Microsoft \ Crypto \ RSA \ MachineKeys".

Ho controllato le risposte alle pagine seguenti, ma assolutamente nessuno di loro ha lavorato per me:

Sto eseguendo l'applicazione da Visual Studio o, e nel segmento di codice in alto, lancia l'eccezione cercando di impostare il

Cos'altro posso fare per farlo funzionare? (Ripensamento, ho anche provato l'autorizzazione "Everyone" sul cert e la cartella - anche questo ha gettato la stessa eccezione)

risposta

4

ho risolto il mio problema utilizzando le seguenti operazioni:

  1. scaricato il WCF_Samples da Microsoft per accedere alla soluzione FindPrivateKey - 15.5mb in size.
  2. Estratto il file zip
  3. Navigato in WCF_Samples \ WCF \ Setup \ FindPrivateKey \ CS \ FindPrivateKey.sln e creato. ctrl+shift+B.
  4. Aggiunta la seguente riga di codice nel metodo Main(string args[]) Perché io sono pigro e non voglio farlo tramite la console: args = new string[] { "My", "LocalMachine", "-t", THUMBPRINT_OBTAINED_IN_MMC, "-a" };
  5. Ran l'applicazione. Ho trovato il percorso per la chiave e navigato ad esso. Si scopre che le autorizzazioni sulla chiave stessa NON erano SET

Ho modificato le autorizzazioni sulla chiave stessa e la mia applicazione ha iniziato a funzionare.

Problemi correlati