2011-05-09 21 views
5

के साथ कैसे और किस सर्वर प्रमाणपत्र का उपयोग करना है मैं एक नेटवर्क-सक्षम एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जो मेरे सर्वर से कनेक्शन प्रमाणित और सुरक्षित करने के लिए SSL क्लाइंट प्रमाणपत्र का उपयोग करता है।एंड्रॉइड एसएसएल क्लाइंट प्रमाण पत्र प्रमाणीकरण

मेरे पास दो प्रश्न हैं: (1) क्या मुझे एक स्व-हस्ताक्षरित सर्वर प्रमाणपत्र या वाणिज्यिक एक का उपयोग करना चाहिए? और (2) क्या मुझे एपीके फ़ाइल के अंदर सर्वर प्रमाणपत्र शामिल करना चाहिए जो उपयोगकर्ताओं को स्थापित करता है या मेरे पास नेटवर्क पर सर्वर प्रमाणपत्र प्राप्त करने के लिए मेरे सर्वर से कनेक्ट होना चाहिए (डिवाइस को सर्वर प्रमाण पर भरोसा करने के उद्देश्य से)?

जब मैं पूछता हूं कि मुझे "क्या करना चाहिए", तो मैं पूछ रहा हूं कि प्रत्येक विकल्प के लाभ और नुकसान क्या हैं?

अभी मैं एपीके फ़ाइल के साथ एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहा हूं। जब उपयोगकर्ता पहली बार ऐप चलाता है, तो यह ट्रस्ट स्टोर में शामिल स्वयं-हस्ताक्षरित प्रमाणपत्र पढ़ता है ताकि डिवाइस बिना किसी शिकायत के मेरे सर्वर से कनेक्ट हो सके। मुझे लगता है कि अगर मैं एक वाणिज्यिक प्रमाण का उपयोग करता हूं तो मेरा प्रश्न # 2 म्यूट हो सकता है, क्योंकि डिवाइस किसी भी समस्या के बिना सर्वर से प्रमाण पर भरोसा कर सकता है।

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

मेरे पास मेरे दो प्रश्नों के प्रत्येक संभावित उत्तर के लिए विभिन्न फायदों और दोषों के बारे में अपने विचार हैं, लेकिन मुझे दूसरों में क्या दिलचस्पी है - उम्मीद है कि सुरक्षा दिमागी - इस मामले पर कहना है।

अग्रिम धन्यवाद!

+1

+1 जैसा कि मुझे एक समान समस्या का सामना करना पड़ रहा है। आप किस दिशा में जा रहे थे? –

+0

मैंने निम्नलिखित कारणों से स्वयं हस्ताक्षरित प्रमाणपत्र चुना है: (1) वाणिज्यिक प्रमाण का लाभ ब्राउज़र पहचान है। मेरा एंड्रॉइड ऐप मेरी सृजन है इसलिए मैं अपने इच्छित रूट रूट को शामिल कर सकता हूं, इस प्रकार एक वाणिज्यिक प्रमाण का उपयोग करके मुझे कोई मामूली लाभ नहीं मिलता है। दूसरी ओर, (2) एक वाणिज्यिक प्रमाण एक जोखिम पेश करता है, क्योंकि अब मैं केवल अपनी सुरक्षा के खिलाफ हमला करने के लिए कमजोर नहीं हूं, बल्कि प्रमाणन प्राधिकरण भी हूं। यदि सीए हैक हो जाता है, तो अपनी निजी कुंजी खो देता है या मेरे डोमेन नाम के साथ सर्वर प्रमाण जारी करने में धोखा दिया जाता है, तो मुझे भुगतना पड़ सकता है। थोड़ा मौका, लेकिन इसे क्यों लेते हैं? अंतिम लेकिन कम से कम (3) पैसा नहीं। –

उत्तर

1

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

रूबी के ओपनएसएसएल बाइंडिंग का उपयोग करके एक कस्टम सीए बनाने का उदाहरण यहां दिया गया है। प्रक्रिया ज्यादातर भाषाओं में समान है। https://github.com/augustl/ruby-openssl-cheat-sheet/blob/master/certificate_authority.rb

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

+0

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

संबंधित मुद्दे