क्या HTTPS धीमा मेरा आवेदन पर प्रमाणीकरण होगा?


11

मैं एक वेब एप्लिकेशन और Restful वेब सेवा का निर्माण कर रहा हूं।

मैं वेब सेवा के अनुरोधों को प्रमाणित करने के सर्वोत्तम तरीके के बारे में विभिन्न लेख पढ़ रहा हूं।

मेरे लिए सबसे अच्छा विकल्प HTTP बेसिक ऑथेंटिकेशन का उपयोग करना प्रतीत होता है। बहुत अधिक हर लेख ive पढ़ा कहता है कि प्रमाणीकरण को SSL या समकक्ष से एन्क्रिप्ट किया जाना चाहिए।

Im पूरी तरह से निश्चित नहीं है कि इसमें क्या शामिल है। क्या इसका मतलब है कि मेरी पूरी वेब सेवा एक सुरक्षित सर्वर पर होनी चाहिए? क्या यह धीमी गति से काम करेगा?


एक विचार, डेटा का cachability https पर लोड किया गया। मैं 100% यकीन नहीं कर रहा हूँ कि क्या / यह कैसे असर करेगा।

मुझे यकीन नहीं है कि मैं अनुसरण करता हूं। क्या आप कह रहे हैं कि कैशिंग संभव नहीं है?
Gaz_Edge

Ssl / https और वेबसर्वर के बीच परस्पर क्रियाएँ होती हैं जो REST - cxf.547215.n5.nabble.com/ ... के साथ अनपेक्षित हो सकती हैं - मैंने एक सुरक्षित वातावरण में REST में बहुत अधिक देरी नहीं की है इसलिए यह नहीं किया गया है मेरे लिए मुद्दा। यह एक अपाचे व्यवस्थापक के रूप में मेरे दिनों से विचारों और संकेतों से अधिक है।

धन्यवाद। आप कहते हैं कि आपने सुरक्षित वातावरण में REST का उपयोग नहीं किया है। क्या इसका मतलब है कि आप प्रमाणीकरण का उपयोग कर रहे हैं? या आप इसे HTTP बेसिक के लिए एक अलग तरीके से कर रहे हैं।
गज़_एज

इसका या तो कोई प्रमाणीकरण नहीं है, बुनियादी, या आईपी आधारित ... और विशुद्ध रूप से इंट्रानेट में (बाहरी रूप से सामना नहीं कर रहा है)।

जवाबों:


11

सबसे पहले, समझने की कोशिश करें कि एसएसएल (एचटीटीपीएस) और एचटीटीपी प्रमाणीकरण कैसे काम करता है।

सामान्य HTTP प्रमाणीकरण विधियां (डाइजेस्ट, बेसिक, और किसी भी प्रकार + कुकी आधारित प्रमाणीकरण योजना जिसे आप HTTP के शीर्ष पर लागू कर सकते हैं) सभी अपने आप से असुरक्षित हैं, क्योंकि वे स्पष्ट पाठ में प्रमाणीकरण जानकारी अधिक या कम भेजते हैं। डेटा POST फ़ील्ड्स या हेडर में है या नहीं, और base64- एन्कोडिंग लागू किया गया है या नहीं, इस संबंध में कोई फर्क नहीं पड़ता, पासवर्ड नेटवर्क ट्रैफ़िक की पहुँच वाले किसी को भी स्पष्ट रूप से दिखाई देता है। इसका मतलब यह है कि एक अविश्वसनीय चैनल पर HTTP प्रमाणीकरण बेकार है: एक हमलावर को अपना पासवर्ड पढ़ने के लिए यह सब लगता है एक छोटा सा नेटवर्क है।

SSL एक अंतर्निहित असुरक्षित चैनल पर एक सुरक्षित संचार चैनल को लागू करता है। यह काम करता है, मोटे तौर पर, निम्नानुसार है:

  1. सर्वर एक हस्ताक्षरित प्रमाण पत्र भेजता है
  2. क्लाइंट ज्ञात-अच्छे हस्ताक्षर कुंजी की सूची के खिलाफ प्रमाण पत्र को सत्यापित करता है; प्रमाणपत्र हस्ताक्षरों को जंजीरों में जकड़ा जा सकता है, ताकि प्रत्येक नोड का कहना है "यदि हस्ताक्षर जो मुझे संकेत देता है वह अच्छा है, तो मैं हूं", लेकिन अंततः, श्रृंखला को क्लाइंट पर पूर्वनिर्धारित विश्वसनीय अधिकारियों में से एक को हल करने की आवश्यकता है।
  3. क्लाइंट एक साझा रहस्य भेजने के लिए सर्वर की सार्वजनिक एन्क्रिप्शन कुंजी का उपयोग करता है
  4. सर्वर निजी कुंजी का उपयोग कर साझा रहस्य को मिटाता है (क्योंकि केवल वैध सर्वर में निजी कुंजी होती है, अन्य सर्वर साझा किए गए डिक्रिप्ट को डिक्रिप्ट करने में असमर्थ होंगे)
  5. क्लाइंट साझा अनुरोध का उपयोग करके एन्क्रिप्टेड वास्तविक अनुरोध डेटा भेजता है
  6. सर्वर डेटा का अनुरोध करता है, फिर एक एन्क्रिप्टेड प्रतिक्रिया भेजता है
  7. ग्राहक प्रतिक्रिया को डिक्रिप्ट करता है और उपयोगकर्ता के सामने प्रस्तुत करता है।

यहाँ कुछ महत्वपूर्ण बिंदुओं पर ध्यान दें:

  • प्रमाण पत्र श्रृंखला ग्राहकों को यह सुनिश्चित करने की अनुमति देती है कि जिस सर्वर से वे बात कर रहे हैं वह वास्तविक है, न कि कोई उनके अनुरोध को रोक रहा है। यही कारण है कि आपको एक वास्तविक एसएसएल प्रमाणपत्र खरीदना चाहिए, और जब आप किसी ऐसी साइट पर हिट करते हैं, जो अमान्य, समाप्त हो चुकी है, या अन्यथा गलत प्रमाणपत्र का उपयोग करती है, तो ब्राउज़र आपको डरावनी चेतावनी क्यों देता है: यदि आप कर रहे हैं तो दुनिया के सभी एन्क्रिप्शन मदद नहीं करते हैं गलत व्यक्ति से बात करना।
  • गुप्त का आदान-प्रदान करने के लिए उपयोग किए जाने वाले सार्वजनिक / निजी एन्क्रिप्शन सुनिश्चित करता है कि succesful संचार केवल क्लाइंट और सर्वर की इस विशेष जोड़ी के बीच काम करेगा: सूंघे गए नेटवर्क पैकेट एन्क्रिप्ट किए जाएंगे, और उन्हें डेटा प्राप्त करने के लिए सर्वर की निजी कुंजी की आवश्यकता होगी।
  • सिमेट्रिक एन्क्रिप्शन का उपयोग अनुरोध के थोक के लिए किया जाता है, क्योंकि इसमें निजी / सार्वजनिक कुंजी एन्क्रिप्शन की तुलना में बहुत कम प्रदर्शन ओवरहेड होता है। कुंजी (साझा रहस्य) का उपयोग निजी / सार्वजनिक कुंजी एन्क्रिप्शन का उपयोग करते हुए किया जाता है, क्योंकि यह एक सुरक्षित तरीके से ऐसा करने का एकमात्र तरीका है (एक अलग चैनल पर परिवहन को छोड़कर, जैसे कि कूरियर सेवा)।

तो जाहिर है, इसमें कुछ ओवरहेड शामिल है, लेकिन यह उतना बुरा नहीं है जितना आप सोचेंगे - यह अधिकतर उस पैमाने पर है जहां "अधिक हार्डवेयर फेंकना" उचित प्रतिक्रिया है, जब तक कि आप बिल्कुल भारी मात्रा में ट्रैफ़िक की तैयारी न करें ( Google या फेसबुक पर विचार करें)। सामान्य परिस्थितियों में, अर्थात, विशिष्ट वेब अनुप्रयोग उपयोग, SSL ओवरहेड नगण्य है, और परिणामस्वरूप, जैसे ही आपके पास कोई गोपनीय डेटा होता है, संसाधनों सहित SSL पर सब कुछ चलाने के लिए सबसे अच्छा है। एसएसएल भी HTTP ट्रैफिक को सुरक्षित करने का एकमात्र व्यवहार्य तरीका है; अन्य विधियां बस के रूप में मानकीकृत नहीं हैं और इस तरह व्यापक रूप से समर्थित नहीं हैं, और आप बिल्कुल इन चीजों को खुद को लागू नहीं करना चाहते हैं, क्योंकि ईमानदारी से, उन्हें गलत करना बहुत आसान है।

TL; DR: हाँ, एसएसएल + बेसिक ऑथेंटिकेशन एक अच्छा विचार है, हाँ, आपको एक सुरक्षित सर्वर (और एक वैध प्रमाण पत्र ) की आवश्यकता है, हाँ, यह थोड़ा धीमा कर देगा, लेकिन नहीं, यह सही के बारे में चिंता करने वाली बात नहीं है अभी।


12

HTTPS (SSL) उपयोगकर्ता प्रमाणीकरण FYI नहीं है। यह सिर्फ 2 एंडपॉइंट के बीच एन्क्रिप्शन प्रदान करता है।

लेकिन हां, इसमें से एक नन्हा सा ओवरहेड है (हालांकि योजनाओं / हार्डवेयर में बदलाव के लिए पर्याप्त नहीं है)। यहाँ देखें :

/programming/548029/how-much-overhead-does-ssl-impose


7
+1 करने से बेहतर है कि छोटे ओवरहेड को देखते हुए ज्यादा सुरक्षित न
रहें

2
यह जवाब बहुत ही भ्रामक है। एसएसएल है , प्रमाणीकरण यह सिर्फ है आमतौर पर नहीं उपयोगकर्ता प्रमाणीकरण। एसएसएल यह प्रमाणित करता है कि जिस सर्वर से आप बात कर रहे हैं वह वास्तव में वह है जो यह कहता है कि यह है। (CA का काम केवल Facebook.com को Facebook के लिए प्रमाणपत्र जारी करना है।) इसके अलावा, SSL ग्राहक प्रमाणपत्र के साथ उपयोगकर्ता प्रमाणीकरण कर सकता है।
josh3736

@ ब्रायन: मैं josh3736 के साथ सम्‍मिलित हूं। SSL शब्द के क्रिप्टोग्राफिक अर्थ में प्रमाणीकरण प्रदान करता है। बिना (जैसे सर्वर) प्रमाणीकरण के आप मध्यम हमलों में आदमी के लिए खुले हैं। एसएसएल स्मार्ट कार्ड का उपयोग करके सुरक्षित ग्राहक (उपयोगकर्ता) प्रमाणीकरण प्रदान कर सकता है या यदि उसने सर्वर को प्रमाणित किया है तो अन्य साधन (जैसे उपयोगकर्ता नाम / पासवर्ड) सुरक्षित चैनल पर उपयोग किए जा सकते हैं।
गाइ सिरटन

वास्तव में, यह स्पष्ट था कि ओपी उपयोगकर्ता प्रमाणीकरण के बारे में पूछ रहा था और ग्राहक को इस बात की चिंता नहीं थी कि वे बीच के हमलों में / आदमी से बात कर रहे हैं। मैंने अपनी पोस्ट को गंभीर पैदल सेना के सामने संपादित किया;) तकनीकी रूप से सही सही का सबसे अच्छा प्रकार है, बाद में
ब्रायन

6

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

सिद्धांत रूप में, आप कुकी प्रमाणीकरण का उपयोग कर सकते हैं और केवल एसएसएल को लॉगिन पेज पर डाल सकते हैं (जहां उपयोगकर्ता नाम और पासवर्ड भेजा जाता है)। यदि आपके कुकीज़ रीप्ले हमलों के खिलाफ शालीनतापूर्वक सुरक्षित और सुरक्षित हैं, तो एक हमलावर उनके साथ कुछ भी करने में सक्षम नहीं होगा, भले ही उन्होंने एक प्राप्त करने का प्रबंधन किया हो।


3

मूल प्रमाणीकरण HTTP अनुरोध के हेडर में उपयोगकर्ता नाम और पासवर्ड सेट कर रहा है। यदि आप एसएसएल या समकक्ष का उपयोग नहीं करते हैं, तो वह उपयोगकर्ता नाम और पासवर्ड सादे पाठ में भेजा जाता है और किसी को भी चोरी करने के लिए तुच्छ है।

अधिकांश वेब सर्वर आजकल HTTPS को बॉक्स से बाहर का समर्थन करते हैं और हालांकि यह हर कॉल में ओवरहेड जोड़ देता है जो ओवरहेड न्यूनतम है।

आप कुछ एंडपॉइंट्स को सुरक्षित कर सकते हैं और अन्य को नहीं (अर्थात एक प्रामाणिक समापन बिंदु है जो एक टोकन का उत्पादन करता है जिसे अन्य कॉल के लिए उपयोग किया जा सकता है)। मैं पूरी सेवा के लिए एसएसएल की जोरदार सिफारिश करूंगा, हालांकि इसकी अधिक सुरक्षित है। (यदि और कुछ नहीं तो यह संवेदनशील डेटा के अवरोधन को रोकता है)


हाँ, मुझे लगता है कि सबसे अच्छा विचार लगता है। मेरा वेब एप्लिकेशन उपयोगकर्ताओं के सत्र आदि का प्रबंधन करेगा ताकि वहां टोकन को बचाया जा सके। लेकिन फिर भी कोई उस सत्र के लिए टोकन को सही समझ सकता है? डेटा सुरक्षा के लिए अभी भी जोखिम हो सकता है
Gaz_Edge

हाँ आम तौर पर। कुकीज़ को सुरक्षित करने के लिए आप कर सकते हैं (यानी उन्हें एन्क्रिप्ट करें) लेकिन पूरी साइट को सुरक्षित करने के लिए सरल और अधिक प्रभावी मार्ग है। जब तक आपके पास एक विशिष्ट उपयोग का मामला नहीं है, मैं सबसे सरल समाधान की सिफारिश करूंगा
टॉम स्क्वायर्स

2

जेफ एटवुड ने एक संक्षिप्त ब्लॉगपोस्ट लिखा कि बहुत पहले नहीं कि क्या पूरा एन्क्रिप्शन जाने का रास्ता है। वह कुछ वास्तविक दुनिया के उदाहरणों का वर्णन करता है और प्रदर्शन विचारों पर भी कुछ पंक्तियाँ रखता है।

इसके अलावा, वह इस लेख का संदर्भ जीमेल केस स्टडी के बारे में देता है, जो निम्नलिखित है:

इस साल जनवरी (2010) में, जीमेल ने डिफ़ॉल्ट रूप से सब कुछ के लिए HTTPS का उपयोग किया। पहले इसे एक विकल्प के रूप में पेश किया गया था, लेकिन अब हमारे सभी उपयोगकर्ता अपने ब्राउज़र और Google के बीच हर समय अपने ईमेल को सुरक्षित करने के लिए HTTPS का उपयोग करते हैं। ऐसा करने के लिए हमें कोई अतिरिक्त मशीन और कोई विशेष हार्डवेयर तैनात नहीं करना था। हमारी उत्पादन सीमा मशीनों पर, SSL / TLS में CPU लोड का 1% से कम, प्रति कनेक्शन 10KB से कम मेमोरी और 2% से अधिक नेटवर्क ओवरहेड होता है। बहुत से लोग मानते हैं कि एसएसएल में बहुत अधिक समय लगता है और हमें उम्मीद है कि उपरोक्त संख्या (पहली बार सार्वजनिक) को दूर करने में मदद मिलेगी।

वह ब्राउज़र द्वारा HTTPS के माध्यम से पृष्ठों के क्लाइंट-साइड कैशिंग के लिए कुछ तत्कालीन सुधारों का भी उल्लेख करता है

इसके बावजूद, वह बताते हैं कि अन्य दंड भी हैं, उनमें से अधिकांश प्रदर्शन नहीं बल्कि कार्यान्वयन लागत हैं:

  • पहले से ही व्यस्त टीमों के लिए अतिरिक्त जटिलता जोड़ते हुए सॉफ्टवेयर गुणवत्ता बनाए रखना,
  • प्रॉक्सी कैशिंग ठीक से कॉन्फ़िगर करने के लिए बहुत कठिन है और कोड परिवर्तनों की भी आवश्यकता है,
  • विभिन्न स्रोतों से सामग्री के मैशअप के लिए सुरक्षा अधिकार प्राप्त करना कठिन है,
  • निम्न-अंत मोबाइल डिवाइस एन्क्रिप्शन के साथ संघर्ष कर सकते हैं।

कृपया अपने उत्तर का विस्तार करें और ब्लॉग से कुछ हाइलाइट्स शामिल करें।
वाल्टर

ब्लॉग पोस्ट की मुख्य विशेषताएं जोड़ी गई हैं।
डैनियल डिनिएस

0

अपने स्वयं के सत्र से निपटने के बिना HTTP मूल स्थिति शायद आपको क्रॉस-साइट अनुरोध जालसाजी के हमलों के लिए खुला छोड़ देगी। यदि आप अपने स्वयं के सत्र से निपटने के साथ युगल करते हैं, तो आप इसका उपयोग कर सकते हैं, लेकिन आपको "लॉग आउट" फ़ंक्शन प्रदान करने में परेशानी हो सकती है।

कोई फर्क नहीं पड़ता कि आप प्रमाणीकरण के लिए क्या उपयोग करते हैं, आपको कनेक्शन को एन्क्रिप्ट करने के लिए HTTPS का उपयोग करना होगा (जब तक कि वेब एप्लिकेशन को केवल नियंत्रित, सुरक्षित नेटवर्क पर एक्सेस नहीं किया जाता है)। यह चीजों को थोड़ा धीमा कर सकता है (कनेक्शन प्रतिष्ठान महंगे हैं, लेकिन ब्राउज़र कुछ समय के लिए कनेक्शन रखने की प्रवृत्ति रखते हैं), लेकिन यदि आप एक सुरक्षित एप्लिकेशन चाहते हैं, तो आप इसे किसी भी तरह से बचने में सक्षम नहीं होंगे, इसलिए आपको वास्तव में ज़रूरत नहीं है इसके बारे में चिंता करने की।

नोट: "HTTPS ऑथेंटिकेशन" (जिसका आपने शीर्षक में उल्लेख किया है) भ्रामक है - यह SSL क्लाइंट सर्टिफिकेशन ऑथेंटिकेशन को संदर्भित कर सकता है, जिसका आपके प्रश्न के पाठ से कोई लेना-देना नहीं है और इसके अपने लाभ और समस्याएं हैं। आप शायद उसे छूना नहीं चाहते।


0

आप मूल प्रमाणीकरण को कैसे पूरा करेंगे?
यदि यह एक हार्ड कोडित उपयोगकर्ता नाम / पासवर्ड है और आप इसे करने के लिए अपने वेबसर्वर की कार्यक्षमता में निर्मित का उपयोग कर रहे हैं, तो इसकी संभावना लगभग शून्य प्रभाव होगी। अगर आप किसी डेटाबेस या इसी तरह की चीजों में पागल काम करना बंद कर रहे हैं, तो हाँ एक प्रभाव हो सकता है।

जैसे अन्य लोगों ने यहां नोट किया है, एसएसएल और अतिरिक्त हेडर भेजने से तकनीकी रूप से चीजें धीमी हो जाएंगी, लेकिन यह किसी भी तरह से महत्वपूर्ण नहीं होगा।

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