.NET में X509Certificate2 और X509Certificate के बीच क्या अंतर है?


जवाबों:


106

X509Certificate नेट v1.0 में पेश किया गया था / 1.1 और था (अपेक्षाकृत) अपनी कार्यक्षमता में सीमित कर दिया। इसका उपयोग किसी मौजूदा प्रमाणपत्र (मान्य दिनांक, जारीकर्ता, आदि) के बारे में जानकारी प्राप्त करने के लिए किया जा सकता है। इसमें सरल तरीके / संचालन (यानी डिस्क से एक प्रमाण पत्र पढ़ना) था।

X509Certificate2 अतिरिक्त कार्यशीलता के साथ x509Certificate का एक उपवर्ग है।

  • यह एक वास्तविक X509 प्रमाणपत्र का प्रतिनिधित्व करता है।
  • यह .NET फ्रेमवर्क v2.0 में नया था।
  • यह वर्ग आपको सभी V2 और V3 गुणों (प्राधिकरण कुंजी पहचानकर्ता और कुंजी उपयोग) तक पहुंच प्रदान करता है।
  • यह एक प्रमाण पत्र की दुकान से प्रमाण पत्र लोड करने का समर्थन करता है।

12
X509Certificate2निजी कुंजी के लिए भी एक सदस्य है, जो प्रमाण पत्र का हिस्सा नहीं है, लेकिन X.509 प्रमाणपत्र का प्रतिनिधित्व करने वाले वर्ग के साथ जुड़ा होना सुविधाजनक है।
ब्रूनो

21

पूर्णता की खातिर, यहाँ @ डोमर के उत्तर में लिंक की गई साइट के संबंधित अनुभाग की एक प्रति है , क्योंकि साइट अब नहीं हो सकती है और केवल Google के कैश में ही कौन-कितने समय के लिए है:

फ्रेमवर्क के संस्करण 1.1 में आपको प्रमाणपत्रों में हेरफेर करने की अनुमति देने के लिए एक्स 509 सर्टिफिकेट वर्ग के अलावा बहुत कम था। वास्तव में, v1.1 X509 सर्टिफिकेट वर्ग ने केवल मूल समर्थन दिया: इसने केवल X509 संस्करण 1 फ़ील्ड (जैसे मान्य से मान्य और दिनांक, विषय और सार्वजनिक कुंजी के लिए) को एक्सेस दिया, लेकिन संस्करण 2 फ़ील्ड (प्राधिकरण कुंजी पहचानकर्ता की तरह) ) और न ही संस्करण 3 फ़ील्ड (कुंजी उपयोग की तरह)। एक प्रमाण पत्र की दुकान से एक प्रमाण पत्र को लोड करने के लिए कोई समर्थन नहीं था, न ही इसके पास प्रमाणपत्र निरस्तीकरण सूची या प्रमाणपत्र ट्रस्ट सूची तक पहुंचने की सुविधाएं हैं। Microsoft ने इस पर वेब सेवा संवर्द्धन (WSE) टूलकिट के साथ प्रमाणपत्र वर्ग का विस्तार किया और प्रमाणपत्र स्टोर तक पहुंचने के लिए कक्षाएं प्रदान कीं। ये कक्षाएं अब .NET 3.0 / 2.0 फ्रेमवर्क लाइब्रेरी में पाई जा सकती हैं।

पहला बड़ा परिवर्तन एक नया वर्ग है जिसे एक्स 509 सर्टिफिकेट 2 कहा जाता है जो एक्स 509 सर्टिफिकेट से प्राप्त होता है। X509 प्रमाणपत्र फ़ील्ड तक पहुँचने के तरीकों को हटा दिया गया है और अब उन फ़ील्ड को एक्सेस करने के लिए वर्ग में गुण हैं। इसके अलावा, यदि प्रमाण पत्र में एक संबद्ध निजी कुंजी है तो वर्ग इस कुंजी तक पहुंच प्रदान करता है। ऐसे तरीके हैं जो आपको पासवर्ड प्रदान करने की अनुमति देते हैं यदि निजी कुंजी एक द्वारा संरक्षित है। पासवर्ड एक सिक्योरस्ट्रिंग पैरामीटर के माध्यम से पारित किया जाता है, जो एक विशेष प्रकार है जो यह सुनिश्चित करता है कि जब ऑब्जेक्ट का उपयोग नहीं किया जा रहा है तो इसे जिस मेमोरी में रखा गया है, उस पर लिखा जाएगा ताकि पासवर्ड को मशीन पर किसी अन्य प्रक्रिया द्वारा नहीं पढ़ा जा सके। सुरक्षित तार और संरक्षित डेटा के अन्य रूपों को बाद के अनुभाग में कवर किया जाएगा।

चूँकि X509Certificate2 X509Certificate से निकला है, इसका मतलब है कि आप X509Certificate2 वर्ग के माध्यम से स्थैतिक तरीके CreateFromeCertFile और CreateFromSignedFile कह सकते हैं। हालाँकि, ये विधियाँ एक X509Certificate ऑब्जेक्ट लौटाती हैं और आप इसे X509Certificate2 ऑब्जेक्ट में नहीं डाल सकते हैं। X509 सर्टिफिकेट वर्ग को संस्करण 3.0 / 2.0 में सुधार किया गया है: यह X509 क्षेत्रों में से कुछ का उपयोग करने के लिए गुण प्रदान करता है; यह एक बाइट सरणी से किसी ऑब्जेक्ट को इनिशियलाइज़ करने के लिए इम्पोर्ट और एक्सपोर्ट मेथड प्रदान करता है या सर्टिफिकेट से एक बाइट अरै जनरेट करता है और इसमें कंस्ट्रक्टर होते हैं जो किसी फाइल (ASN.1 DER) और बाइट एरे से ऑब्जेक्ट बनाएंगे। दिलचस्प बात यह है कि, X509Certificate2 क्लास में एक कंस्ट्रक्टर है जो X509C सर्टिफिकेट ऑब्जेक्ट से X509Certificate2 ऑब्जेक्ट बना सकता है।


6

X.509 सर्टिफिकेट को "X509 सर्टिफिकेट" से "X509Cert सर्टिफिकेट 2" में बदलने के लिए, कुछ इस तरह आज़माएँ:

X509Certificate  X509  = sslStream.RemoteCertificate;
X509Certificate2 X5092 = new X509Certificate2(X509);

2

उन लोगों के लिए जो प्रमाण पत्र को पढ़ना चाहते हैं और इसे प्रमाणित करने के लिए इसका उपयोग करते हैं, बस एक X509Certificate2 बनाएँगे और इसमें X509Certificate का निर्माण करेंगे।

एक हस्ताक्षरित असेंबली (exe) के लिए कोड इस तरह कोड होगा, और मैं सरलता के लिए त्रुटि सत्यापन छोड़ देता हूं।

Module m = Assembly.GetEntryAssembly().GetModules()[0];
using (var cert = m.GetSignerCertificate())
using (var cert2 = new X509Certificate2(cert))
{
   var _clientHandler = new HttpClientHandler();
   _clientHandler.ClientCertificates.Add(cert2);
   _clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
   var myModel = new Dictionary<string, string>
   {
       { "property1","value" },
       { "property2","value" },
   };
   using (var content = new FormUrlEncodedContent(myModel))
   using (var _client = new HttpClient(_clientHandler))
   using (HttpResponseMessage response = _client.PostAsync($"{url}/{controler}/{action}", content).Result)
   {
       response.EnsureSuccessStatusCode();
       string jsonString = response.Content.ReadAsStringAsync().Result;
       var json = new Newtonsoft.Json.JsonSerializer();
       var myClass = JsonConvert.DeserializeObject<MyClass>(json);
    }
}

जाहिर है कि आप वर्ग को MyClass नहीं कहा जाता है, लेकिन कुछ व्यावसायिक वस्तुएं जिन्हें आप वेब सेवा से उम्मीद करेंगे।

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

public class MyController : ApiController
{
    public IHttpActionResult Get()
    {           
       X509Certificate2 clientCertInRequest = Request.HttpContext.Connection.ClientCertificate;
       if (!clientCertInRequest.Verify() || !AllowedCerialNumbers(clientCertInRequest.SerialNumber))
       {
            Response.StatusCode = 404;
            return null;
       }
       //your code
   }

}

जो कुछ बचा है, उसे ग्राहक प्रमाणपत्रों को स्वीकार करने के लिए अपने वेबसर्वर को सेट करना है ... आप उन सभी गुणों के बारे में पढ़ सकते हैं जो नए प्रारूप से आते हैं और आपने अपनी सार्वजनिक वेब सेवा प्राप्त कर ली है, कुछ ऐसा करने में असफल होते हैं, जैसे कि अधिकृत होना पर्याप्त नहीं है। अब (यदि यह कभी था)

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