2012-01-26 17 views
7

मेरा उद्देश्य: एंड्रॉइड प्रोग्राममैकली में - सीए प्रमाणपत्र सहित एक ईएपी वाईफाई कॉन्फ़िगरेशन बनाएं।एंड्रॉइड में प्रोग्रामेटिक रूप से सीए प्रमाणपत्र (ईएपी वाईफाई कॉन्फ़िगरेशन के लिए) कैसे स्थापित करें?

समस्या: मैं सीए प्रमाणपत्र को प्रोग्रामेटिक रूप से कैसे स्थापित करूं (और फिर उस प्रमाणपत्र को ईएपी वाईफ़ाई कॉन्फ़िगरेशन में संदर्भित करें)?

मैंने पाया एक बहुत ही उपयोगी लिंक पहले से ही है कि मुझे बना सकते हैं और यहां EAP WiFi के विन्यास को बचाने के लिए अनुमति देता है: How to programmatically create and read WEP/EAP WiFi configurations in Android?

हालांकि इस मान लिया गया है आप पहले से ही डिवाइस पर CA प्रमाणपत्र स्थापित किया है कि। मैं अपने ऐप के भीतर प्रमाण पत्र स्थापित करना चाहता हूं - या तो ऐप के संसाधनों से, या सर्वर से भेजा गया है।

क्या यह भी संभव है? (इस मामले में रूटिंग एक विकल्प नहीं है।) यदि हां, तो कैसे?

अतिरिक्त जानकारी ...

मैं भी एक तरह से एक KeyStore करने के लिए प्रमाणपत्र जोड़ने के लिए मिला: https://stackoverflow.com/a/4490543/1172101

हालांकि यह एक सुरक्षित सॉकेट बनाने और HTTPS के माध्यम से कनेक्ट करने के लिए विशेष रूप से प्रयोग किया जाता है। मैं वाईफाई के लिए प्रमाण पत्र का उपयोग करना चाहता हूं।


दुर्भाग्य से, मुझे अभी तक ऐप के भीतर से सीए प्रमाणपत्र प्रोग्राम स्थापित करने का कोई तरीका नहीं मिला है।

हालांकि, Android में वेब ब्राउज़र के माध्यम से प्रमाणपत्र स्थापित करना संभव है। इस प्रकार, समाधान (अभी के लिए) है: वेब ब्राउज़र में एक यूआरएल खोलने का इरादा लॉन्च करें जो सीधे सीए प्रमाणपत्र में जाता है।

यह काम करता है लेकिन कुछ चुनौतियां हैं:

  • उपयोगकर्ता प्रमाणपत्र नाम देना होगा। यह एक चुनौती है क्योंकि हम प्रोग्रामिंग रूप से वाईफाई कॉन्फ़िगरेशन जोड़ रहे हैं। इस प्रकार हमें उपयोगकर्ता से प्रमाण पत्र देने के लिए कहा जाना चाहिए।
  • उपयोगकर्ता को एक पासवर्ड दर्ज करना होगा। अगर उनके पास पासवर्ड सेट अप नहीं है, तो उपयोगकर्ता एक बना देगा और इसे दो बार दर्ज करेगा। अगर उन्होंने एक सुरक्षा पासवर्ड सेट किया है, तो उपयोगकर्ता को वही पासवर्ड याद रखना होगा और इसे दर्ज करना होगा।
  • मान लें कि उपयोगकर्ता इन चरणों को सफलतापूर्वक पूरा करता है, वह ब्राउज़र में लटक रहा है।

यह कुछ सवाल की ओर जाता है:

  • मेरे ऐप से, वहाँ प्रमाण पत्र है कि उपयोगकर्ता ब्राउज़र के माध्यम से स्थापित करता है के लिए एक नाम के लिए मजबूर करने के लिए एक रास्ता है?
  • मेरे ऐप से, क्या यह जानने का कोई तरीका है कि प्रमाणपत्र स्थापना कब पूर्ण हो गई है और फिर मेरे ऐप पर वापस ध्यान दें?

अगर आपको कोई स्पष्टीकरण की आवश्यकता है तो बस मुझे बताएं।

उत्तर

6

आप इसे सीधे इंस्टॉल नहीं कर सकते क्योंकि गैर-सिस्टम अनुप्रयोगों को कुंजी स्टोर तक पहुंच नहीं है।आईसीएस पर, इस KeyChain.createInstallIntent() के लिए एक एपीआई है जो उपयोगकर्ता से पूछे जाने वाले सिस्टम संवाद को लॉन्च करेगी कि वे प्रमाणपत्र स्थापित करना चाहते हैं या नहीं। प्री-आईसीएस पर आप सीधे घटक नाम का उपयोग करके इंस्टॉल इरादे लॉन्च करके एक ही चीज़ प्राप्त कर सकते हैं (हालांकि यह सभी उपकरणों पर काम कर सकता है या नहीं)। ब्राउज़र के माध्यम से जाना वास्तव में एक ही काम करने का एक चौराहे तरीका है।

अपने प्रश्नों के लिए के रूप में:

  1. आप निर्दिष्ट नहीं कर सकते/एक नाम बाध्य करते हैं। आप वास्तविक नाम की परवाह क्यों करते हैं?
  2. वास्तव में ब्राउज़र के माध्यम से नहीं। यदि आप सिस्टम के इरादे का उपयोग करते हैं, तो आप अपनी गतिविधि पर वापस आ सकते हैं और यदि आप startActivityForResult() का उपयोग करते हैं तो कॉलबैक प्राप्त होगा।

अद्यतन: एंड्रॉइड 4.3 में WifiEnterpriseConfig है जो दोनों एक प्रोफ़ाइल बनाता है और सिस्टम क्रेडेंशियल स्टोर में कुंजी और प्रमाणपत्र स्थापित करता है। आपको केवल CHANGE_WIFI_STATE अनुमति की आवश्यकता है।

+0

हाय निकोले, मैंने यहां आपके कीस्टोर पोस्ट को पढ़ा है: - http://nelenkov.blogspot.in/2012/05/storing-plplication-secrets-in-androids.html क्या मैं प्रोग्रामिंग से सीए प्रमाण पत्र पास करने के लिए इसका उपयोग कर सकता हूं वाईफाई कॉन्फ़िगरेशन कक्षा में ऐप। वाईफाई कॉन्फ़िगरेशन क्लास सिस्टम कीस्टोर के मेरे ऐप कीस्टोर आयनस्टेड को संदर्भित करेगी –

0

मैं एक ही तलाश कर रहा हूँ ... अपने प्रश्न के लिए के रूप में, @Nikolay:

आप निर्दिष्ट नहीं कर सकते/एक नाम बाध्य करते हैं। आप वास्तविक नाम की परवाह क्यों करते हैं?

ईएपी प्रोफ़ाइल को पहले से स्थापित-सीए के नाम की आवश्यकता है। आप भाग 4 में उदाहरण देखते हैं, तो आप निर्दिष्ट कर सकते हैं:

final String ENTERPRISE_CA_CERT = ""; 

उदाहरण में, प्रोफ़ाइल सीए नाम का उपयोग नहीं है, लेकिन है कि अन्य ईएपी प्रोफाइल के लिए मामला हो सकता है।

0

मैं वर्तमान में एक ही समस्या को हल करने के लिए देख रहा हूं। सबसे अच्छी बात जो मैंने पाया है वह KeyChain.choosePrivateKeyAlias ​​() उपयोगकर्ता को यह चुनने की इजाजत देता है कि एसएसएल के लिए कौन सा प्रमाणपत्र उपयोग करना है। वहां से आप उपनाम नाम पुनर्प्राप्त कर सकते हैं और इसे एंटरप्राइज़ वाईफ़ाई कॉन्फ़िगरेशन में पास कर सकते हैं।

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