नोट: मैंने अपना मूल उत्तर बहुत जल्दबाजी में लिखा था, लेकिन तब से, यह काफी लोकप्रिय प्रश्न / उत्तर में बदल गया है, इसलिए मैंने इसे थोड़ा विस्तारित किया है और इसे अधिक सटीक बनाया है।
टीएलएस क्षमताएं
"एसएसएल" वह नाम है जो अक्सर इस प्रोटोकॉल को संदर्भित करने के लिए उपयोग किया जाता है, लेकिन एसएसएल विशेष रूप से मध्य 90 के दशक में नेटस्केप द्वारा डिज़ाइन किए गए स्वामित्व प्रोटोकॉल को संदर्भित करता है। "टीएलएस" एक आईईटीएफ मानक है जो एसएसएल पर आधारित है, इसलिए मैं अपने उत्तर में टीएलएस का उपयोग करूंगा। इन दिनों, यह संभावना है कि वेब पर आपके सभी सुरक्षित कनेक्शन वास्तव में TLS का उपयोग कर रहे हैं, एसएसएल का नहीं।
TLS में कई क्षमताएं हैं:
- अपने एप्लिकेशन लेयर डेटा को एन्क्रिप्ट करें। (आपके मामले में, एप्लिकेशन लेयर प्रोटोकॉल HTTP है।)
- क्लाइंट को सर्वर प्रमाणित करें।
- क्लाइंट को सर्वर पर प्रमाणित करें।
# 1 और # 2 बहुत आम हैं। # 3 कम आम है। आप # 2 पर ध्यान केंद्रित कर रहे हैं, इसलिए मैं उस हिस्से को समझाऊंगा।
प्रमाणीकरण
एक सर्टिफिकेट का उपयोग करके एक क्लाइंट खुद को एक ग्राहक के लिए प्रमाणित करता है। एक प्रमाण पत्र डेटा का एक बूँद है [1] जिसमें एक वेबसाइट के बारे में जानकारी होती है:
- डोमेन नाम
- सार्वजनिक कुंजी
- जो कंपनी इसका मालिक है
- जब यह जारी किया गया था
- जब यह समाप्त हो जाता है
- इसे किसने जारी किया
- आदि।
प्रमाण पत्र में शामिल सार्वजनिक कुंजी का उपयोग करके संदेशों को एन्क्रिप्ट करने के लिए आप गोपनीयता (# 1 ऊपर) प्राप्त कर सकते हैं जो केवल उसी निजी कुंजी द्वारा डिक्रिप्ट की जा सकती है, जिसे उस सर्वर पर सुरक्षित रूप से संग्रहीत किया जाना चाहिए। [2] इस कुंजी जोड़ी को KP1 कहते हैं, ताकि हम बाद में भ्रमित न हों। आप यह भी सत्यापित कर सकते हैं कि प्रमाणपत्र पर डोमेन नाम आपके द्वारा देखी जा रही साइट (# 2 ऊपर) से मेल खाता है।
लेकिन क्या होगा यदि एक विरोधी एक पैकेट को सर्वर से और उसके पास भेज सकता है, और क्या होगा यदि उस सलाहकार ने आपके द्वारा प्रस्तुत प्रमाण पत्र को संशोधित किया है और अपनी खुद की सार्वजनिक कुंजी डाल दी है या कोई अन्य महत्वपूर्ण विवरण बदल दिया है? यदि ऐसा हुआ, तो विरोधी आपके द्वारा सुरक्षित रूप से एन्क्रिप्ट किए गए किसी भी संदेश को रोक सकता है और संशोधित कर सकता है।
इस बहुत हमले को रोकने के लिए, प्रमाण पत्र को किसी अन्य व्यक्ति की निजी कुंजी द्वारा क्रिप्टोग्राफिक रूप से हस्ताक्षरित किया जाता है ताकि हस्ताक्षर उसी व्यक्ति द्वारा सत्यापित किया जा सके जिसके पास संबंधित सार्वजनिक कुंजी है। चलो इस कुंजी जोड़ी को KP2 कहते हैं, यह स्पष्ट करने के लिए कि ये वही कुंजी नहीं हैं जो सर्वर उपयोग कर रहा है।
प्रमाणपत्र प्राधिकारी
तो किसने बनाया KP2? प्रमाण पत्र पर किसने हस्ताक्षर किए?
एक बिट को दर्शाते हुए, एक प्रमाण पत्र प्राधिकरण KP2 बनाता है, और वे अन्य संगठनों के लिए प्रमाण पत्र पर हस्ताक्षर करने के लिए अपनी निजी कुंजी का उपयोग करने की सेवा बेचते हैं। उदाहरण के लिए, मैं एक प्रमाण पत्र बनाता हूं और मैं उसकी निजी कुंजी के साथ हस्ताक्षर करने के लिए वेरिसाइन जैसी कंपनी को भुगतान करता हूं। [३] चूँकि Verisign के पास इस निजी कुंजी की पहुंच नहीं है, इसलिए हममें से कोई भी इस हस्ताक्षर को नहीं कर सकता है।
और मैं उस हस्ताक्षर को सत्यापित करने के लिए केपी 2 में व्यक्तिगत रूप से सार्वजनिक कुंजी कैसे प्राप्त करूंगा?
वैसे हमने पहले ही देखा है कि एक प्रमाण पत्र सार्वजनिक कुंजी पकड़ सकता है - और कंप्यूटर वैज्ञानिक पुनरावृत्ति से प्यार करते हैं - इसलिए केपी 2 सार्वजनिक कुंजी को एक प्रमाण पत्र में क्यों न डालें और इसे इस तरह से वितरित करें? यह पहली बार में थोड़ा पागल लगता है, लेकिन वास्तव में यह कैसे काम करता है। Verisign उदाहरण के साथ जारी रखते हुए, Verisign एक प्रमाण पत्र तैयार करता है जिसमें यह जानकारी होती है कि वे कौन हैं, उन्हें किस प्रकार की चीज़ों पर हस्ताक्षर करने की अनुमति है (अन्य प्रमाण पत्र), और उनकी सार्वजनिक कुंजी।
अब अगर मेरे पास उस सत्यापन प्रमाणपत्र की एक प्रति है, तो मैं उस वेबसाइट के लिए सर्वर प्रमाणपत्र पर हस्ताक्षर को मान्य करने के लिए उपयोग कर सकता हूं जिसे मैं यात्रा करना चाहता हूं। आसान, सही ?!
खैर, इतनी जल्दी नहीं। मुझे कहीं से वेरिसाइन सर्टिफिकेट लेना था । क्या होगा अगर कोई वेरिसाइन प्रमाण पत्र को खराब कर दे और अपनी खुद की सार्वजनिक कुंजी वहां रख दे? फिर वे सर्वर के प्रमाण पत्र पर हस्ताक्षर कर सकते हैं, और हम ठीक उसी जगह पर हैं जहाँ हमने शुरू किया था: एक आदमी का मध्य हमला।
प्रमाणपत्र जंजीरों
पुनरावर्ती रूप से सोचने के लिए जारी रखते हुए, हम निश्चित रूप से एक तीसरा प्रमाण पत्र और एक तीसरी कुंजी जोड़ी (KP3) को पेश कर सकते हैं और उपयोग कर सकते हैं कि Verisign certifcate पर हस्ताक्षर करने के लिए। हम इसे एक प्रमाणपत्र श्रृंखला कहते हैं: श्रृंखला के प्रत्येक प्रमाणपत्र का उपयोग अगले प्रमाणपत्र को सत्यापित करने के लिए किया जाता है। उम्मीद है कि आप पहले से ही देख सकते हैं कि इस पुनरावर्ती दृष्टिकोण कछुए / प्रमाण पत्र सभी तरह से नीचे हैं। कहां रुकता है?
चूंकि हम अनंत संख्या में प्रमाण पत्र नहीं बना सकते हैं, इसलिए प्रमाण पत्र श्रृंखला को स्पष्ट रूप से कहीं न कहीं रोकना होगा , और यह उस श्रृंखला में एक प्रमाण पत्र को शामिल करके किया जाता है जो स्व-हस्ताक्षरित है ।
मैं एक पल के लिए विराम देता हूं जब आप अपने सिर के विस्फोट से मस्तिष्क के मामले के टुकड़े उठाते हैं। स्व-हस्ताक्षरित ?!
हां, प्रमाण पत्र श्रृंखला (उर्फ "रूट") के अंत में, एक प्रमाण पत्र होगा जो स्वयं साइन करने के लिए स्वयं की कीपर का उपयोग करता है। यह अनंत पुनरावृत्ति समस्या को समाप्त करता है, लेकिन यह प्रमाणीकरण समस्या को ठीक नहीं करता है। कोई भी व्यक्ति एक स्व-हस्ताक्षरित प्रमाण पत्र बना सकता है जो उस पर कुछ भी कहता है, जैसे मैं एक नकली प्रिंसटन डिप्लोमा बना सकता हूं जो कहता है कि मैं राजनीति, सैद्धांतिक भौतिकी और प्रमुख बट-किकिंग में प्रमुख हूं और फिर तल पर अपना नाम हस्ताक्षर कर सकता हूं।
इस समस्या का [कुछ अस्पष्ट] समाधान केवल स्व-हस्ताक्षरित प्रमाण पत्र के कुछ सेट को चुनना है जिसे आप स्पष्ट रूप से भरोसा करते हैं। उदाहरण के लिए, मैं कह सकता हूं, "मुझे इस वेरिसाइन स्व-हस्ताक्षरित प्रमाणपत्र पर भरोसा है ।"
उस स्पष्ट विश्वास के साथ, अब मैं पूरी प्रमाणपत्र श्रृंखला को मान्य कर सकता हूं। कोई फर्क नहीं पड़ता कि श्रृंखला में कितने प्रमाण पत्र हैं, मैं प्रत्येक हस्ताक्षर को रूट के नीचे सभी तरह से मान्य कर सकता हूं। जब मैं रूट पर पहुंचता हूं, तो मैं यह जांच सकता हूं कि क्या वह रूट सर्टिफिकेट एक है जिस पर मुझे स्पष्ट रूप से भरोसा है। यदि ऐसा है, तो मैं पूरी श्रृंखला पर भरोसा कर सकता हूं।
विश्वसनीय ट्रस्ट
टीएलएस में प्रमाणीकरण, भरोसेमंद ट्रस्ट की एक प्रणाली का उपयोग करता है । यदि मैं एक ऑटो मैकेनिक को किराए पर लेना चाहता हूं, तो मैं किसी भी यादृच्छिक मैकेनिक पर भरोसा नहीं कर सकता हूं जो मुझे मिलता है। लेकिन शायद मेरा दोस्त एक विशेष मैकेनिक के लिए वाउच करता है। चूंकि मुझे अपने दोस्त पर भरोसा है, तो मैं उस मैकेनिक पर भरोसा कर सकता हूं।
जब आप एक कंप्यूटर खरीदते हैं या एक ब्राउज़र डाउनलोड करते हैं, तो यह कुछ सौ रूट प्रमाणपत्रों के साथ आता है जो स्पष्ट रूप से भरोसा करता है। [४] जो कंपनियां उन प्रमाणपत्रों का स्वामित्व और संचालन करती हैं, वे अपने प्रमाणपत्रों पर हस्ताक्षर करके अन्य संगठनों पर भरोसा कर सकते हैं।
यह एक संपूर्ण प्रणाली से दूर है। कुछ समय में CA गलत तरीके से प्रमाणपत्र जारी कर सकता है। उन मामलों में, प्रमाणपत्र को निरस्त करने की आवश्यकता हो सकती है। निरस्तीकरण मुश्किल है क्योंकि जारी प्रमाण पत्र हमेशा क्रिप्टोग्राफिक रूप से सही होगा; एक आउट-ऑफ-बैंड प्रोटोकॉल यह पता लगाने के लिए आवश्यक है कि पहले मान्य प्रमाण पत्र निरस्त किए गए हैं। व्यवहार में, इनमें से कुछ प्रोटोकॉल बहुत सुरक्षित नहीं हैं, और कई ब्राउज़र वैसे भी उनकी जांच नहीं करते हैं।
कभी-कभी पूरे CA से समझौता कर लिया जाता है। उदाहरण के लिए, यदि आप वेरिसाइन में टूट जाते हैं और उनकी रूट साइनिंग कुंजी चोरी कर लेते हैं, तो आप दुनिया के किसी भी प्रमाण पत्र को खराब कर सकते हैं। ध्यान दें कि यह सिर्फ Verisign ग्राहकों को प्रभावित नहीं करता है: यहां तक कि अगर मेरे प्रमाणपत्र Thawte (Verisign के एक प्रतियोगी) द्वारा हस्ताक्षरित है, तो इससे कोई फर्क नहीं पड़ता। मेरा प्रमाणपत्र अभी भी Verisign से समझौता हस्ताक्षरित कुंजी का उपयोग करके जाली हो सकता है।
यह सिर्फ सैद्धांतिक नहीं है। यह जंगली में हुआ है। डिगिनोटार को प्रसिद्ध रूप से हैक किया गया और बाद में दिवालिया हो गया। कोमोडो को भी हैक कर लिया गया था , लेकिन बेवजह वे आज भी कारोबार में बने हुए हैं।
यहां तक कि जब सीए से सीधे समझौता नहीं किया जाता है, तो इस प्रणाली में अन्य खतरे भी होते हैं। उदाहरण के लिए, एक सरकार जाली प्रमाण पत्र पर हस्ताक्षर करने के लिए एक सीए को मजबूर करने के लिए कानूनी जबरदस्ती का उपयोग करती है। आपका नियोक्ता आपके कर्मचारी कंप्यूटर पर अपना स्वयं का सीए प्रमाणपत्र स्थापित कर सकता है। इन विभिन्न मामलों में, ट्रैफ़िक जिसे आप "सुरक्षित" होने की उम्मीद करते हैं, वास्तव में उस प्रमाणपत्र को नियंत्रित करने वाले संगठन के लिए पूरी तरह से दृश्यमान / परिवर्तनीय है।
कुछ प्रतिस्थापनों का सुझाव दिया गया है, जिसमें कन्वर्जेंस , TACK और DANE शामिल हैं ।
एंडनोट्स
[1] टीएलएस प्रमाणपत्र डेटा को X.509 मानक के अनुसार स्वरूपित किया जाता है । 509 पर आधारित है ASN.1 ( "सार वाक्य विन्यास संकेतन # 1"), जिसका अर्थ है कि यह है नहीं एक बाइनरी डेटा स्वरूप। इसलिए, X.509 को एक द्विआधारी प्रारूप में एन्कोड किया जाना चाहिए । डीईआर और पीईएम दो सबसे आम एनकोडिंग हैं, जिनके बारे में मुझे पता है।
[२] व्यवहार में, प्रोटोकॉल वास्तव में एक सममित सिफर पर बदल जाता है, लेकिन यह एक ऐसा विवरण है जो आपके प्रश्न के लिए प्रासंगिक नहीं है।
[३] माना जाता है कि, सीए वास्तव में आपके प्रमाण पत्र पर हस्ताक्षर करने से पहले आपको मान्य करता है। अगर वे ऐसा नहीं करते, तो मैं सिर्फ google.com के लिए एक प्रमाण पत्र बना सकता था और एक CA से इस पर हस्ताक्षर करने के लिए कह सकता था। उस सर्टिफिकेट के साथ, मैं google.com पर किसी भी "सुरक्षित" कनेक्शन को मैन-इन-द-बीच कर सकता था। इसलिए, CA के संचालन में सत्यापन चरण एक बहुत महत्वपूर्ण कारक है। दुर्भाग्य से, यह बहुत स्पष्ट नहीं है कि दुनिया भर के सैकड़ों सीए में यह सत्यापन प्रक्रिया कितनी कठोर है।
[४] मोज़िला की विश्वसनीय सीए की सूची देखें ।