C # में इसके थंबप्रिंट द्वारा प्रमाण पत्र कैसे खोजें


82

मैं इस कोड का उपयोग अपने अंगूठे के द्वारा प्रमाण पत्र खोजने के लिए कर रहा हूं। प्रमाण पत्र व्यक्तिगत प्रमाण पत्र की दुकान में प्रमाण पत्र प्रबंधक में मौजूद है, लेकिन यह कोड उस प्रमाण पत्र को नहीं ढूंढ रहा है।

कृपया बताएं कि मैं इसमें कहां गलत कर रहा हूं।

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string certThumbPrint = "‎‎fe14593dd66b2406c5269d742d04b6e1ab03adb1";
            X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            // Try to open the store.

            certStore.Open(OpenFlags.ReadOnly);
            // Find the certificate that matches the thumbprint.
            X509Certificate2Collection certCollection = certStore.Certificates.Find(
                X509FindType.FindByThumbprint, certThumbPrint, false);
            certStore.Close();

            // Check to see if our certificate was added to the collection. If no, 
            // throw an error, if yes, create a certificate using it.
            if (0 == certCollection.Count)
            {
                Console.WriteLine("Error: No certificate found containing thumbprint " );
            }
            Console.ReadLine();
}


X509Storeऔजार IDisposableयह तो एक साथ किया जाना चाहिए usingबयान।
एलेक्स वेलेजो

जवाबों:


208

इस मुद्दे पर Googling के दौरान बस इस सवाल पर ठोकर खाई, और यहाँ जवाब मिला : अगर, मेरी तरह, आपने थंबप्रिंट को हाइलाइट करके और इसे क्लिपबोर्ड पर कॉपी करके MMC से अपना "स्रोत" थंबप्रिंट प्राप्त किया है, तो आप लगभग निश्चित रूप से पकड़े गए हैं। स्क्रीन की शुरुआत में अदृश्य चरित्र, इसलिए:

string certThumbPrint = "fe14593dd66b2406c5269d742d04b6e1ab03adb1";

वास्तव में है

स्ट्रिंग certThumbPrint = " INVISIBLECHARACTER fe14593dd66b2406c5269d742d04b6e1ab03adb1";

यदि आप इस अदृश्य चरित्र को हटाते हैं (आप इसे तब बता सकते हैं जब आप बैकस्पेस दबाते हैं या इसके बगल में हटाते हैं और कुछ भी नहीं होता है), या बस हाथ से अंगूठे का निशान हटाएं, आपका कोड ठीक काम करना चाहिए। अब अगर केवल विजुअल स्टूडियो के पास "अदृश्य वर्ण दिखाएं" विकल्प था ...


2
VS में एडिट> एडवांस> वाइट स्पेस (Ctrl + R, Ctrl + W to टॉगल) देखें - यह मदद कर सकता है, यदि आप जानते हैं, तो क्या देखना है।
माइकल फ्रीजिम

@MichaelFreidgeim यह मदद नहीं करता है। वीएस छिपे हुए पात्रों को नहीं दिखाता है, केवल अंतरिक्ष वर्ण है।
जॉर्ज पोलेवॉय

@MichaelFreidgeim व्हाइट स्पेस वीएस 2013 में कम से कम इन विशेष अदृश्य वर्णों को प्रदर्शित नहीं करता है।
जेरेमी कुक

मैंने एमएमसी से चयन और प्रतिलिपि के लिए भी गिरावट की।
मोत्ज़

3
HOLY @% $ @ $ !!! इस महाकाव्य है। बर्बाद हो गए, तत्काल खिड़की से खेलते हुए, सोच रहे थे कि "फू" == "फू" झूठी थी। आप, सर, एक उत्थान के लायक हैं। धन्यवाद!
थियागो सिल्वा

18

आपके अंगूठे के निशान वाले स्ट्रिंग शाब्दिक में शुरुआत में बाएं से दाएं निशान होता है। जब MMC प्रमाणपत्र गुणों को सूचीबद्ध करता है, तो यह इस वर्ण के साथ थम्बप्रिंट मान से पहले होता है ताकि हेक्स बाइट्स को उन स्थानों पर दाएं से बाएं सूचीबद्ध किया जाए जहां पाठ को सामान्य रूप से दाएं से बाएं प्रदान किया जाता है।

संभवतः, यह एक ऐसा शॉर्टकट था जिसे किसी व्यक्ति ने लिया क्योंकि संपत्ति सूची में किसी एक मूल्य के चरित्र को प्रस्तुत करना आसान था, संपादन नियंत्रण की शैली को गतिशील रूप से अपडेट करने के लिए थोड़ा कोड लिखने से। शायद यह स्थानीयकरण परीक्षण के दौरान एक बग रिपोर्ट के लिए एक त्वरित सुधार था।

MMC में, बाएं से दाएं चिह्न की शून्य-शून्य चौड़ाई होती है, जिसे आप कर्सर को देखते हुए अवलोकन कर सकते हैं जब आप उस पर तीर चलाते हैं और यह ध्यान रखते हैं कि हेक्स बाइट्स की पहली पंक्ति दाईं ओर थोड़ी-थोड़ी स्थानांतरित की गई है दूसरी कतार।

विज़ुअल स्टूडियो जैसे अन्य संपादकों में, बाएं से दाएं चिह्न की कोई चौड़ाई नहीं है, लेकिन आप अभी भी यह ध्यान देकर देख सकते हैं कि जब आप तीर पर होते हैं तो कर्सर नहीं चलता है। जैसा कि KenD ने उत्तर दिया, इस चरित्र को हटाने से समस्या हल हो जाती है।

अदृश्य चरित्र की पहचान करने का त्वरित तरीका: अदृश्य चरित्र का चयन करने के लिए कीबोर्ड का उपयोग करें; फिर इसे कुछ सामान्य अक्षरों के बीच वर्ड में पेस्ट करें। इसे वर्ड में चुनें; फिर सम्मिलित करें> प्रतीक> अधिक प्रतीकों पर क्लिक करें। "यूनिकोड नाम" के नीचे बाईं ओर देखें।


10

यह सुनिश्चित करने के लिए कि LTR "\ u200e" और RTL "\ u200f" वर्ण आपके थंबप्रिंट से हटा दिए गए हैं, निम्नलिखित कार्य करें

thumbprint = thumbprint.Replace("\u200e", string.Empty).Replace("\u200f", string.Empty).Replace(" ",string.Empty);

अंतिम स्ट्रिंग पूरी तरह से आवश्यक नहीं होने के कारण सफेद स्थान को हटाने के लिए प्रतिस्थापित करती है क्योंकि यह उनके साथ या उनके बिना मेरा प्रमाण पत्र पाता है।

अन्य परेशान करने वाले यूनिकोड वर्ण यहां देखे जा सकते हैं

UTF-8 एन्कोडिंग तालिका और यूनिकोड वर्ण


5

मेरे दो सेंट: मैंने एमएमसी में मूल्य की नकल की और इसे वीएस में व्हाइट स्पेस के साथ पेस्ट किया।

शुरुआत में कुछ भी नहीं था लेकिन अंत में एक जगह थी: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"

अब, web.config फ़ाइल में, मैंने अंतिम स्थान को हटाते हुए, अंदर के सभी स्थानों को बनाए रखने वाले मान को चिपका दिया: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"

यह ठीक काम करता है।

अगर मैं "1e52730d0029e6857be623e2fac7a508ac365e57" का उपयोग करता हूं, तो अंदर की जगह को हटाकर जैसा कि मैं अन्य पोस्ट में देखता हूं, काम नहीं करता ...

आशा है कि यह मदद कर सकता है;)


2

मैं सभी अंगूठे के निशान पाने के लिए इस पॉवरशेल स्क्रिप्ट को चलाता हूं और आउटपुट को टेक्स्ट फाइल पर रीडायरेक्ट करता हूं और वहां से थंबप्रिंट कॉपी करता हूं।

Get-ChildItem -path cert:\LocalMachine\My

एक पाठ फ़ाइल के लिए आउटपुट का पुनर्निर्देशित करने के लिए इसका उपयोग करें:

Get-ChildItem -path cert:\LocalMachine\My > thumbprints.txt

इसके लिए शुक्रिया! मेरे पास पहले से ही एक प्रमाण पत्र था और बस उसे नहीं पता था। इससे पता चला कि मुझे क्या पता होना चाहिए।
rjacobsen0

2

मैंने अतिरिक्त चरित्र को हटाने के लिए निम्न कार्य किया, और कुछ भी हटाने के लिए जो कि मान्य हेक्साडेसिमल नहीं है (और इसे छोड़ दें):

            thumbprint = Regex.Replace(thumbprint.ToUpper(), @"[^0-9A-F]+", string.Empty);

इसने मुझे प्रमाणित प्रबंधक संवाद से सीधे थंबप्रिंट कॉपी करने और अपने उपयोग में सीधे पेस्ट करने की अनुमति दी।


0

मैं एक कंसोल एप्लिकेशन लिखकर समस्या को हल करने में सक्षम था जो प्रमाण पत्र पर सभी अनुभागों को पुनर्प्राप्त करता है और थंबप्रिंट आईडी को आउटपुट करता है। मैंने कंसोल आउटपुट को कॉपी किया और थंबप्रिंट डाला। कोई बात नहीं। एमएमसी कंसोल से कॉपी करने जैसा लगता है कि डेटा समान दिखने के बावजूद समस्याएँ पैदा करता है। मैंने सभी प्रमाणपत्रों को पढ़ने के लिए शुरुआती बिंदु के रूप में इस साइट का उपयोग किया।

https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.thumbprint(v=vs.110).aspx

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.