2010-11-16 12 views
10

मेरे पास कुछ सी # 4.0 कोड है जो वर्तमान (मेरा) उपयोगकर्ता के लिए "विश्वसनीय रूट प्रमाणन प्राधिकरण" स्टोर में CA (.der एन्कोडेड) प्रमाणपत्र स्थापित करने का प्रयास करता है। मेरा छोटा कंसोल ऐप अन्य स्टोर्स के खिलाफ चुपचाप चलता है, लेकिन इस स्टोर के लिए एक जीयूआई पॉपअप आता है "आप प्रमाणन प्राधिकरण से प्रमाणपत्र स्थापित करने जा रहे हैं ... विंडोज़ मान्य नहीं कर सकता है कि सर्टिफिकेट वास्तव में है ..... क्या आप इस प्रमाणपत्र को स्थापित करना चाहते हैं? "प्रमाणपत्र स्थापित सुरक्षा चेतावनी वर्कअराउंड?

यह संदेशबॉक्स एक समस्या है क्योंकि विचार स्वचालित रूप से एमएसआई के साथ ऐप को तैनात करना है और चुपचाप सही जगह पर दाएं कोने प्राप्त करना है। एक मॉडल बॉक्स होने से स्वचालित तैनाती को मार दिया जाएगा।

इस स्थापना को तैनाती-ब्रेकिंग संदेशबॉक्स के बिना कैसे किया जा सकता है?

+1

कारण विंडोज पॉप कि सवाल को निम्नलिखित के बारे में हो सकता है कि जड़ दुकान में प्रमाण पत्र को जोड़ने सुरक्षा के प्रभाव है, और इसलिए चाहिए है हल्के से नहीं किया जाना चाहिए। मुझे यकीन नहीं है कि पॉपअप से बचने का कोई तरीका है, लेकिन मुझे आशा नहीं होगी! किसी एप्लिकेशन को इंस्टॉल करना ** ** को पीसी की सुरक्षा समझौता करने की अनुमति नहीं दी जानी चाहिए - खासकर चुपचाप नहीं। – dajames

+2

@ ओजेग की तरह डीजेम्स ने अपने उत्तर में लिखा: एक व्यवस्थापक को पॉपअप के बिना स्थानीय मशीनों पर विश्वसनीय रूट स्टोर में प्रमाण पत्र स्थापित करने की अनुमति है। और जब आप कोई एप्लिकेशन इंस्टॉल करते हैं तो आप आमतौर पर इंस्टॉलर व्यवस्थापक अधिकार देते हैं, इसलिए मुझे लगता है कि आपका परिदृश्य वास्तव में संभव है। एक अन्य कारण आपको सावधान रहना चाहिए कि इंस्टॉलर/एप्लिकेशन आप अपने बहुमूल्य व्यवस्थापक अधिकार देते हैं। – Stefan

उत्तर

25

यह तार्किक नहीं लग सकता है, लेकिन कोई चेतावनी नहीं है कि आपको वर्तमान उपयोगकर्ता के रूट प्रमाणपत्र स्टोर में नहीं, बल्कि स्थानीय मशीन की रूट पर प्रमाण पत्र जोड़ना चाहिए। आप आसानी से सत्यापित कर सकते हैं कि

certmgr.exe -add -c t.cer -s -r currentUser root 

सुरक्षा चेतावनी का उत्पादन है, लेकिन

certmgr.exe -add -c t.cer -s -r localMachine root 
नहीं

तो अगर आप नेट में एक प्रमाणपत्र आयात चाहते हैं तो इसी कोड

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

namespace AddCertToRootStore { 
    class Program { 
     static void Main (string[] args) { 
      X509Store store = new X509Store (StoreName.Root, 
              StoreLocation.LocalMachine); 
      store.Open (OpenFlags.ReadWrite); 
      X509Certificate2Collection collection = new X509Certificate2Collection(); 
      X509Certificate2 cert = new X509Certificate2 (@"C:\Oleg\t.cer"); 
      byte[] encodedCert = cert.GetRawCertData(); 
      Console.WriteLine ("The certificate will be added to the Root..."); 
      store.Add (cert); 
      Console.WriteLine("Verify, that the certificate are added successfully"); 
      Console.ReadKey(); 
      Console.WriteLine ("The certificate will be removed from the Root"); 
      store.Remove (cert); 
      store.Close(); 
     } 
    } 
} 
+0

मैंने अभी अपनी विंडोज 7 मशीन पर यह कोशिश की। काम करने के लिए आपको प्रशासन अधिकारों की आवश्यकता है। मुझे लगता है कि यह समझ में आता है कि व्यवस्थापक बिना किसी दृश्य संकेत के स्थानीय मशीन के लिए विश्वसनीय रूट प्रमाणपत्र स्थापित कर सकता है। – Stefan

+0

@Stefan: बेशक ** केवल व्यवस्थापक ** * स्थानीय * मशीन ** में ** रूट प्रमाणपत्र स्थापित करने में सक्षम हैं, लेकिन विशेष रूप से मामले में प्रमाणपत्रों की स्थापना कभी-कभी चुप होनी चाहिए। उदाहरण के लिए सेटअप के बारे में सोचें। इसलिए मैंने जो लिखा है उसमें मुझे कोई समस्या नहीं है। – Oleg

+0

मैं बस इंगित करना चाहता था (अन्य लोगों के लिए इस उत्तर पर ठोकर खा रहा है) कि केवल प्रशासक ही ऐसा कर सकता है, न कि किसी भी उपयोगकर्ता को। यह आपके जवाब को पढ़ने के तुरंत बाद मुझे स्पष्ट नहीं था। लेकिन अन्यथा अंतर्दृष्टि और उपयोगी कोड नमूना के लिए +1 – Stefan

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