एक उदाहरण से समझाता हूं।
सामान्य की-जोड़ी आधारित PKI में, निजी कुंजी और सार्वजनिक कुंजी होती है।
प्रमाणपत्र-आधारित प्रणाली में, निजी कुंजी और प्रमाण पत्र होते हैं। प्रमाणपत्र सार्वजनिक कुंजी से अधिक जानकारी रखता है।
डेमो (आप एक प्रमाण पत्र और निजी कुंजी उत्पन्न कर सकते हैं): http://www.selfsigncertificate.com/
आप निजी कुंजी फ़ाइल और प्रमाणपत्र फ़ाइल खोल सकते हैं, आप देख सकते हैं कि प्रमाण पत्र फ़ाइल में नीचे दी गई जानकारी है।
आप इस साइट से अपने उत्पन्न प्रमाण पत्र (एक पाठ संपादक द्वारा खोलने), और निजी कुंजी (एक पाठ संपादक द्वारा खोलना) का मिलान कर सकते हैं: https://www.sslshopper.com/certificate-key-matcher.html
यदि प्रमाणपत्र क्लाइंट की निजी कुंजी से मेल खाता है, तो ग्राहक सुनिश्चित है, वह प्रमाण पत्र ग्राहक द्वारा दिया गया है या ग्राहक के विश्वसनीय एजेंट (CA) द्वारा दिया गया है।
हालांकि, केवल निजी कुंजी और प्रमाणपत्र-आधारित संचार में समस्याएं हैं ।
क्योंकि, कोई भी व्यक्ति अपना प्रमाणपत्र और निजी कुंजी उत्पन्न कर सकता है, इसलिए एक साधारण हैंडशेक सर्वर के अलावा कुछ भी साबित नहीं करता है कि सर्वर उस निजी कुंजी को जानता है जो प्रमाण पत्र की सार्वजनिक कुंजी से मेल खाती है। इस समस्या को हल करने का एक तरीका यह है कि ग्राहक के पास एक या अधिक प्रमाणपत्रों का एक सेट है , जिस पर वह भरोसा करता है। यदि प्रमाणपत्र सेट में नहीं है, तो सर्वर पर भरोसा नहीं करना है ।
इस सरल दृष्टिकोण के लिए कई डाउनसाइड हैं। सर्वर को समय के साथ मजबूत कुंजी ("कुंजी रोटेशन") में अपग्रेड करने में सक्षम होना चाहिए, जो प्रमाण पत्र में सार्वजनिक कुंजी को एक नए के साथ बदल देता है। दुर्भाग्यवश, अब क्लाइंट ऐप को अपडेट किया जाना चाहिए क्योंकि अनिवार्य रूप से एक सर्वर कॉन्फ़िगरेशन परिवर्तन है। यह विशेष रूप से समस्याग्रस्त है यदि सर्वर ऐप डेवलपर के नियंत्रण में नहीं है, उदाहरण के लिए, यदि यह एक तृतीय पक्ष वेब सेवा है। इस दृष्टिकोण में भी समस्याएँ हैं यदि ऐप को वेब ब्राउज़र या ईमेल ऐप जैसे मनमाने सर्वर से बात करनी है।
इन डाउनसाइड को संबोधित करने के लिए, सर्वर को आमतौर पर सर्टिफिकेट अथॉरिटीज (सीए) नामक प्रसिद्ध जारीकर्ताओं से प्रमाणपत्रों के साथ कॉन्फ़िगर किया जाता है। वह मेजबान-मंच (ग्राहक) में आम तौर पर जाने-माने सीए की एक सूची होती है, जिस पर वह भरोसा करता है। सर्वर के समान, CA के पास एक प्रमाणपत्र और एक निजी कुंजी है। सर्वर के लिए प्रमाणपत्र जारी करते समय, CA अपनी निजी कुंजी का उपयोग करके सर्वर प्रमाणपत्र पर हस्ताक्षर करता है। क्लाइंट तब यह सत्यापित कर सकता है कि सर्वर के पास प्लेटफ़ॉर्म पर ज्ञात सीए द्वारा जारी किया गया प्रमाण पत्र है।
हालाँकि, कुछ समस्याओं को हल करते समय, CA का उपयोग करना दूसरे का परिचय देता है। क्योंकि CA कई सर्वरों के लिए प्रमाण पत्र जारी करता है, फिर भी आपको यह सुनिश्चित करने के लिए किसी तरह की आवश्यकता होती है कि आप जिस सर्वर से बात कर रहे हैं। इसे संबोधित करने के लिए, CA द्वारा जारी प्रमाण पत्र सर्वर की पहचान या तो एक विशिष्ट नाम जैसे gmail.com या मेजबानों के एक वाइल्डकार्ड सेट जैसे * .google.com से करता है।
निम्न उदाहरण इन अवधारणाओं को थोड़ा और ठोस बना देगा। कमांड लाइन से नीचे स्निपेट में, Opensl टूल का s_client कमांड विकिपीडिया के सर्वर प्रमाणपत्र जानकारी को देखता है। यह पोर्ट 443 को निर्दिष्ट करता है क्योंकि HTTPS के लिए यह डिफ़ॉल्ट है। कमांड ओपनएसएल एस 50 के आउटपुट को ओपनएसएल एक्स 509 में भेजती है, जो एक्स 509 मानक के अनुसार प्रमाण पत्र के बारे में जानकारी को प्रारूपित करता है। विशेष रूप से, कमांड उस विषय के लिए पूछता है, जिसमें सर्वर नाम की जानकारी होती है, और जारीकर्ता, जो सीए की पहचान करता है।
$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer
subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org
issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA
आप देख सकते हैं कि सर्टिफिकेट मेल के लिए जारी किया गया था।
जैसा कि आप देख सकते हैं, CA द्वारा सर्वर को भेजी गई इस अतिरिक्त जानकारी के कारण, ग्राहक आसानी से जान सकता है कि वह अपने सर्वर के साथ संचार कर रहा है या नहीं।