2009-02-27 25 views
8

वर्तमान में मेरे पास एक रोल-आपकी स्वयं की एप्लिकेशन सुरक्षा सेवा है जो मेरे उद्यम में चलता है और - अधिकांश भाग-बैठक व्यवसाय आवश्यकताओं के लिए है।एसएसएल सत्र दृढ़ता और सुरक्षित कुकीज़

जिस मुद्दे का मैं वर्तमान में सामना कर रहा हूं वह यह है कि सेवा परंपरागत रूप से (naively) उपयोगकर्ता के स्रोत आईपी पर निर्भर करती है जो सत्र अपहरण के खिलाफ बचाव के रूप में निरंतर स्थिर रहता है - उद्यम में वेब अनुप्रयोग सीधे जनता के लिए उपलब्ध नहीं होते हैं और यह था अतीत में मेरे लिए पूरी तरह स्वीकार्य है कि किसी दिए गए सत्र में उपयोगकर्ता का पता स्थिर रहे।

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

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

इसके चेहरे पर, यह एक सही समाधान की तरह लगता है, हालांकि मुझे इस योजना के वास्तविक दुनिया के कार्यान्वयन के कारण अव्यवहारिक है क्योंकि क्लाइंट और सर्वर किसी भी समय प्रभावी ढंग से हो सकता है - प्रभावी ढंग से मनमाने ढंग से - एसएसएल सत्र को दोबारा बातचीत करने का विकल्प चुनते हैं और इसलिए कुंजी बदलते हैं।

इस

परिदृश्य मैं envisioning कर रहा हूँ:

  1. एसएसएल सत्र की स्थापना की और कुंजी पर सहमत हुए।
  2. क्लाइंट एप्लिकेशन स्तर पर सर्वर पर प्रमाणीकृत करता है (यानी उपयोगकर्ता नाम और पासवर्ड के माध्यम से)।
  3. सर्वर एक सुरक्षित कुकी लिखता है जिसमें SSL सत्र कुंजी शामिल है।
  4. कुछ ऐसा होता है जो सत्र पुन: बातचीत का कारण बनता है। उदाहरण के लिए, मुझे लगता है कि आईई बिना किसी कारण के टाइमर पर करता है।
  5. क्लाइंट पुरानी सत्र कुंजी वाले सर्वर से अनुरोध सबमिट करता है (क्योंकि पुन: बातचीत के कोई अनुप्रयोग स्तर का ज्ञान नहीं था, इसलिए क्लाइंट को नए, अद्यतन हैश को लिखा जाने का कोई मौका नहीं था)।
  6. सर्वर ग्राहक के मैच विफलता हैश के कारण क्रेडेंशियल, आदि

यह एक असली मुद्दा है को खारिज कर दिया या यह मेरी ओर से एक ग़लतफ़हमी एक की वजह से (कम से कम कहने के लिए) से कम एकदम सही है की समझ एसएसएल कैसे काम करता है?

उत्तर

1

हां, लेकिन इसके बारे में आप कई चीजें कर सकते हैं। आपके द्वारा नमक (प्रति उपयोगकर्ता) के रूप में उपयोग की जाने वाली सत्र कुंजी को आसानी से कैश करने के लिए सबसे आसान, और उनमें से किसी को स्वीकार करें। यहां तक ​​कि अगर सत्र फिर से बातचीत की जाती है तो भी आपको अपने कैश में रहना होगा। विवरण हैं - समाप्ति नीति, आदि .-- लेकिन कुछ भी नहीं है जब तक कि आप कुछ ऐसा नहीं कर रहे हैं जिसे मिल्स्पेक कठोर होना चाहिए, इस मामले में आपको इसे पहले स्थान पर नहीं करना चाहिए।

- MarkusQ

+0

करने के लिए अपने कुकीज़ सेट लेकिन इस कैश समाधान समस्या यह है कि ग्राहक अचानक नया SSL सत्र कुंजी है कि आवेदन के बारे में पता नहीं है का उपयोग करता है का समाधान नहीं होगा। ग्राहक को यह कहना होगा कि "अब मैं एक नई एसएसएल सत्र कुंजी का उपयोग करता हूं" या सर्वर को एक महत्वपूर्ण परिवर्तन के बारे में एप्लिकेशन को सूचित करना होगा। – Gumbo

+0

नहीं, ग्राहक पुराने सत्र कुंजी के आधार पर एक कुकी में भेज देगा (सत्र को फिर से बातचीत करने से कुकी साफ़ नहीं होगी)। नमक केवल अनुमान लगाने में मुश्किल बनाने के लिए है, यह कुछ भी हो सकता है। एसएसएल सत्र कुंजी सिर्फ सही आकार के बारे में आसान है, और उपयुक्त रूप से entropic है। – MarkusQ

+0

@ मार्कस्क्यू, यह सुनिश्चित नहीं है कि अगर मैं वास्तव में मशीन ए से मशीन बी तक कुकी कॉपी करता हूं और फिर मशीन ए (एक नए एसएसएल सत्र पर) के रूप में मास्कराइड करता हूं तो – vladr

5

SSL persistence से संबंधित सभी विषय देखें। लोड-बैलेंसर दुनिया में यह एक अच्छी तरह से शोध किया गया मुद्दा है।

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

2014 अद्यतन

बस https का उपयोग कराने के और यह सुनिश्चित करें कि कि आप session fixation करने के लिए या CRIME की चपेट में नहीं कर रहे हैं। किसी भी क्लाइंट-साइड जानकारी के साथ अपने ऑथ टोकन को नमक करने के लिए परेशान न करें क्योंकि यदि कोई हमलावर टोकन प्राप्त करने में सक्षम था (बशर्ते कि टोकन अनुमान लगाने के लिए तुच्छ नहीं था) तो इसे प्राप्त करने के लिए किसी भी साधन का उपयोग किया गया था (उदाहरण के लिए cross-site scripting, या क्लाइंट सिस्टम का पूर्ण समझौता) हमलावर को किसी भी क्लाइंट-साइड जानकारी को आसानी से प्राप्त करने की अनुमति देगा जो टोकन में हो सकता है (और आवश्यकता होने पर द्वितीयक सिस्टम पर दोहराएं)।

यदि ग्राहक केवल कुछ सिस्टम से कनेक्ट होने की संभावना है, तो संभवत: generate an RSA keypair in the browser संभवतः प्रत्येक नए क्लाइंट सिस्टम से क्लाइंट कनेक्ट हो सकता है (जहां सार्वजनिक हिस्सा आपके सर्वर पर सबमिट किया गया है और निजी हिस्सा क्या है उम्मीद है कि सुरक्षित क्लाइंट स्टोरेज) और पासवर्ड-आधारित प्रमाणीकरण के बदले two-way (peer/client certificate) verification का उपयोग करने वाले वर्चुअल होस्ट पर रीडायरेक्ट करें।

+0

क्या आप "इसका सामना कर रहे हैं ... अनएन्क्रिप्टेड संचार चैनल" में सफल रहे हैं? – loveNoHate

+0

नहीं, आपको एक एन्क्रिप्टेड चैनल का उपयोग करना होगा अन्यथा आप उन सभी हमलों के लिए कमजोर हो जाते हैं जिन्हें एसएसएल/टीएलएस को विफल करने के लिए बनाया गया था। – vladr

3

मैं सोच रहा हूँ कारण है कि यह सिर्फ पर्याप्त बस

  1. अपने परिवहन
  2. एनकोड आदानों (html/यूआरएल/विशेषता) क्रॉस-साइट स्क्रिप्टिंग
  3. केवल आवश्यकता को रोकने के लिए ssl की आवश्यकता के लिए नहीं होगा सूचनाओं को बदलने वाले सभी अनुरोधों के लिए POSTs और
  4. सीएसआरएफ को जितना संभव हो उतना रोकें (आपके प्लेटफ़ॉर्म का समर्थन करने के आधार पर)।
  5. HTTPOnly
संबंधित मुद्दे