2014-07-23 3 views
5

शुभ दिनSystem.Security.Cryptography.CryptographicException: कुंजी समुच्चय दृश्य स्टूडियो

मैं इस त्रुटि के कारण एक निजी कुंजी असाइन करने की कोशिश गंभीर मुद्दों हो रहा है अंदर फेंक दिया मौजूद नहीं है।

  1. प्रमाण पत्र के लिए एक निजी कुंजी है:

    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. 
    

    मैं निम्नलिखित सत्यापित किया है।

  2. आईएसआरआर, नेटवर्क सेवा, स्थानीय सेवा और एमएमसी कंसोल पर स्थानीय उपयोगकर्ता संदर्भ को प्रमाण पत्र पर अनुमतियां दी गई हैं। सर्टिफिकेट स्थानीय मैचिन में है - व्यक्तिगत फ़ोल्डर
  3. उसी प्रक्रिया को "सी: \ दस्तावेज़ और सेटिंग्स \ सभी उपयोगकर्ता \ अनुप्रयोग डेटा \ Microsoft \ Crypto \ RSA \ MachineKeys" पर मशीनकी फ़ोल्डर को अनुमतियां दी जाती हैं।

मैं अगले पन्नों पर जवाब जाँच कर ली है, लेकिन पूरी तरह से उनमें से कोई भी मेरे लिए काम किया:

  • Stack Overflow User @blowdart's answer
  • MSDN Answer
  • अन्य साइटों, लेकिन सेट अप करने की करना पड़ा आईआईएस और वहां काम करने के लिए प्रमाण पत्र प्राप्त करना

मैं विजुअल स्टडी के भीतर से एप्लिकेशन चला रहा हूं ओ, और उपरोक्त कोड सेगमेंट पर, यह SignedXml's SigningKey

सेट करने का प्रयास करने का अपवाद फेंकता है, इसे पाने और चलाने के लिए मैं और क्या कर सकता हूं? (बाद का विचार है, मैं भी प्रमाणपत्र और फ़ोल्डर पर "सभी" अनुमति की कोशिश की है - यहां तक ​​कि कि एक ही अपवाद फेंक दिया)

उत्तर

4

मैं निम्न चरणों का उपयोग मेरी समस्या हल हो जाती है:

  1. से WCF_Samples डाउनलोड किया गया माइक्रोसॉफ्ट FindPrivateKey - 15.5mb in size समाधान तक पहुंच प्राप्त करने के लिए।
  2. ज़िप फ़ाइल
  3. WCF_Samples \ WCF \ Setup \ FindPrivateKey \ CS \ FindPrivateKey.sln पर नेविगेट किया गया और इसे निर्मित किया गया। ctrl+shift+B
  4. जोड़ा गया Main(string args[]) विधि में निम्न कोड पंक्ति क्योंकि मैं आलसी हूँ और सांत्वना के माध्यम से यह करने के लिए नहीं करना चाहती: args = new string[] { "My", "LocalMachine", "-t", THUMBPRINT_OBTAINED_IN_MMC, "-a" };
  5. आवेदन Ran। मुझे कुंजी का मार्ग मिला और इसके लिए नेविगेट किया। यह पता चला है कि कुंजी पर अनुमतियां सेट नहीं थी

मैंने कुंजी पर अनुमतियां बदल दीं, और मेरा एप्लिकेशन काम करना शुरू कर दिया।

संबंधित मुद्दे