एंड्रॉइड 7 नूगाट के साथ चार्ल्स प्रॉक्सी काम कैसे प्राप्त करें?


101

एंड्रॉइड 7 ने प्रमाणपत्रों को संभालने के तरीके में कुछ बदलाव किए ( http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html ) और किसी तरह मैं अपने चार्ल्स प्रॉक्सी को और अधिक काम नहीं कर सकता।

मेरा network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

मैं डिबग मोड में चल रहा हूं। लेकिन कोई बात नहीं, मुझे मिलता है javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

कहने की जरूरत नहीं है, मैंने एक pfxप्रमाण पत्र स्थापित किया है Settings -> Security -> Install from storage। प्रमाण पत्र दिखाता है User Credentialsलेकिन अंदर नहीं Trusted credentials -> User। मेरे लॉलीपॉप डिवाइस पर, प्रमाण पत्र वहां सूचीबद्ध हैं।

मैं HTTP लाइब्रेरी के रूप में okhttp3 का उपयोग कर रहा हूं।

कोई आइडिया है कि मैं क्या गलत कर रहा हूँ ?


1
एक त्वरित परीक्षण के रूप में, इसमें userकिसी को जोड़ने / स्थानांतरित करने का प्रयास करें <base-config>और देखें कि क्या परिवर्तन मायने रखता है। यह नहीं होना चाहिए, लेकिन यह केवल एक पल की कोशिश करेंगे।
कॉमन्सवेयर

क्या आपको डेवलपर के लिए चार्ल्स में स्पष्ट CA जोड़ने की आवश्यकता नहीं होगी ।android.com/training/articles/security-config.html: 'अतिरिक्त CA पर भरोसा करना' क्योंकि चार्ल्स CA एक स्वयं उत्पन्न है और इसमें नहीं होगा Android सिस्टम ट्रस्ट चेन?
मॉरिसन चांग

@ मॉरिसन चांग: मैं चार्ल्स सीए को ऐप में एम्बेड नहीं करना चाहता, मैं इसे अपने विकास फोन पर मैन्युअल रूप से जोड़ना चाहूंगा जैसे मैं करता था। सेSettings -> Security -> Install from storage
mbonnin

1. आप अपने ऐप के AndroidManifest.xml में network_security_config.xml कैसे संदर्भित कर रहे हैं? 2. क्या आप कृपया .pfx फ़ाइल को लिंक करेंगे? मुझे लगता है कि इसमें केवल CA प्रमाणपत्र (कोई निजी कुंजी नहीं) है और इस प्रकार प्रकाशित करने के लिए ठीक होना चाहिए। मैं पूछ रहा हूँ क्योंकि, अगर .pfx में एक निजी कुंजी होती है, तो इसे ग्राहक प्रमाणित फ़ाइल माना जाएगा और इस प्रकार फ़ाइल से CA को सर्वर प्रमाणीकरण के लिए विश्वसनीय के रूप में स्थापित नहीं किया जाएगा।
एलेक्स क्लाईबिन

1
@AlexKlyubin जल्दी, यह अब काम कर रहा है :)। मुझे लगता है कि मुझे अपने आकर्षण या ऐप या किसी अन्य चीज को रिबूट करने की आवश्यकता है। मैं उलझन में था क्योंकि मैंने nougat से पहले अनगिनत एंड्रॉइड डिवाइस पर एक ही .pfx फ़ाइल स्थापित की है और उन्हें ठीक पहचाना गया था। लेकिन अब सब कुछ अच्छा है। क्या आप एक उत्तर लिख सकते हैं ताकि मैं इसे अनुमोदित कर सकूं?
मोंबिनिन

जवाबों:


26

ओपी के लिए टिप्पणियों के समस्या निवारण धागे के आधार पर, उत्तर केवल प्रॉक्सी के सीए प्रमाणपत्र को विश्वसनीय के रूप में स्थापित करना है, न कि इसकी प्रमाणित + निजी कुंजी।

मुद्दा दो कारकों के कारण था:

  1. न केवल MiTM प्रॉक्सी का CA सर्टिफिकेट, बल्कि इसकी निजी कुंजी भी स्थापित करना (इस प्रकार वीपीएन एप्स को डिवाइस पर अन्य एप्स से / MiTM नेटवर्क ट्रैफिक को डिक्रिप्ट करने में सक्षम)। आपको डिवाइस पर MiTM प्रॉक्सी की निजी कुंजी की आवश्यकता नहीं है।

  2. एंड्रॉइड नौगट Settings -> Security -> Install from storageफ़ाइलों के लिए प्रवाह के व्यवहार में परिवर्तन करता है जिसमें प्रमाण (एस) के अलावा एक निजी कुंजी होती है। व्यवहार में इस बदलाव ने उपरोक्त मुद्दे को उजागर किया।

नूगट से पहले, Settings -> Security -> Install from storageसर्वर प्रमाणीकरण के लिए विश्वसनीय के रूप में गलत तरीके से स्थापित किए गए सेर्ट्स के अलावा एक निजी कुंजी युक्त फ़ाइलों के लिए प्रवाह (जैसे, HTTPS, TLS, इस प्रकार आपके MiTM को सफल बनाते हैं), ग्राहक के रूप में उपयोग किए जाने वाले क्लाइंट के रूप में सही ढंग से उपयोग किए जाने के अलावा। इस Android डिवाइस को सर्वरों के लिए प्रमाणित करना। नौगट में, बग को ठीक कर दिया गया था और ये प्रमाणीकरण सर्वर प्रमाणीकरण के लिए भरोसेमंद नहीं रह गए हैं। यह क्लाइंट प्रमाणीकरण क्रेडेंशियल्स को सर्वर से कनेक्शन की सुरक्षा को प्रभावित (कमजोर) करने से रोकता है। आपके परिदृश्य में, यह आपके MiTM को सफल होने से रोकता है।

क्या जटिलताएं होती हैं, यह Settings -> Security -> Install from storageनिर्दिष्ट करने के लिए उपयोगकर्ता के लिए एक स्पष्ट तरीका प्रदान नहीं करता है कि वे एक ग्राहक प्रमाणीकरण क्रेडेंशियल (निजी कुंजी + प्रमाणित श्रृंखला) या एक सर्वर प्रमाणीकरण ट्रस्ट एंकर स्थापित कर रहे हैं (बस एक सीए प्रमाणित - कोई निजी कुंजी की आवश्यकता नहीं) । नतीजतन, Settings -> Security -> Install from storageप्रवाह का अनुमान है कि क्या यह क्लाइंट / उपयोगकर्ता प्रमाणीकरण क्रेडेंशियल या सर्वर प्रमाणीकरण ट्रस्ट एंकर के साथ काम कर रहा है, यह मानकर कि यदि कोई निजी कुंजी निर्दिष्ट है, तो यह क्लाइंट / उपयोगकर्ता प्रमाणीकरण क्रेडेंशियल होना चाहिए। आपके मामले में, यह गलत तरीके से माना गया है कि आप सर्वर प्रमाणीकरण ट्रस्ट एंकर की बजाय एक क्लाइंट / उपयोगकर्ता प्रमाणीकरण क्रेडेंशियल स्थापित कर रहे हैं।

PS आपके नेटवर्क सुरक्षा कॉन्फ़िगरेशन के संबंध में, आपको संभवतः डिबग मोड (डिबग-ओवरराइड्स सेक्शन) में "सिस्टम" ट्रस्ट एंकर पर भरोसा करने के लिए एप्लिकेशन को कॉन्फ़िगर करना चाहिए। अन्यथा ऐप का डिबग बिल्ड तब तक काम नहीं करेगा जब तक कि कनेक्शन एक प्रॉक्सी द्वारा MiTM'd न हो जिसका CA सर्टिफिकेट एंड्रॉइड डिवाइस पर भरोसेमंद हो।


1
पीएस के बारे में: प्रलेखन कहता है Trust anchors specified in debug-overrides are added to all other configurations। इसलिए मैं इस धारणा के तहत था कि यह 'आधार-विन्यास' में जोड़ा गया है और इसे पूरी तरह से प्रतिस्थापित नहीं किया गया है?
म्बानिन

ओह, तुम सही हो। आपको डिबग-ओवरराइड में "एंकर" ट्रस्ट एंकर को स्पष्ट रूप से सूचीबद्ध करने की आवश्यकता नहीं है।
एलेक्स क्लाईबिन

4
यह उत्तर स्पष्ट नहीं है। नीचे दिए गए @ stkent के जवाब को देखें।
एडम हर्विट्ज

4
सहमत इस उत्तर में बताया गया है कि क्या हो रहा है लेकिन यह बहुत स्पष्ट नहीं है कि किसी को क्या करना चाहिए।
StarWind0

114

समाधान .p12 का उपयोग नहीं करता है , बस क्रोम के साथ नेविगेट करें (वाईफाई पर कॉन्फ़िगर प्रॉक्सी के साथ) http://charlesproxy.com/getssl पर जाएं और डाउनलोड की गई .pem फ़ाइल स्थापित करें

मुझे अपने नेक्सस 5 एक्स पर ठीक वैसी ही समस्या थी जो एंड्रॉयड 7.0 पर चल रही थी। पहले चार्ल्स .11.5 से .p12 निर्यात किया गया था (मदद-> एसएसएल प्रॉक्सी-> निर्यात चार्ल्स रूट प्रमाणपत्र और निजी कुंजी)। जब मैंने फोन से .p12 को स्थापित करने की कोशिश की (सेटिंग्स-> सुरक्षा-> स्टोरेज से इंस्टॉल करें) यह केवल "उपयोगकर्ता क्रेडेंशियल्स" के तहत दिखाई देता है और कभी भी "विश्वसनीय क्रेडेंशियल्स" पर नहीं, और निश्चित रूप से चार्ल्स प्रॉक्सी के साथ एसएसएल ने काम नहीं किया।

एंड्रॉइड 7.0 के लिए कुल "हाउ-टू" ऐसा होगा:

  1. WiFi + प्रॉक्सी कॉन्फ़िगर करें (चार्ल्स को इसकी आवश्यकता कैसे है)। इसे कनेक्ट करें।
  2. डिवाइस पर, Chrome के साथ http://charlesproxy.com/getssl पर जाएं , डाउनलोड .pem के लिए अनुरोध स्वीकार करें, फिर "ओपन" दबाएं, यह "सर्टिफिकेट इंस्टॉलर" ऐप लॉन्च करता है। प्रमाण पत्र को "वीपीएन और ऐप्स" के रूप में स्थापित करने के लिए इसका उपयोग करें।
  3. विशेषता android:networkSecurityConfig="@xml/network_security_config"को <application>मेनिफेस्ट.एक्सएमएल पर डालें
  4. पहली पोस्ट की सामग्री के साथ Res / xml / network_security_config.xml बनाएं (यह पूरी तरह सही है)।
  5. चार्ल्स और ऐप लॉन्च करें और मज़े करें।

PS डिवाइस पर तारीख / समय की जाँच करें। यह सही होना चाहिए।


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

1
यह एंड्रॉइड 7.0 के लिए एक शानदार समाधान है। आधिकारिक चार्ल्स प्रॉक्सी जानकारी की तुलना में बहुत स्पष्ट है।
एडम लिंक

3
शायद केवल मैं, लेकिन ये चरण मेरे लिए 7.1.1 में काम नहीं करते हैं। मैंने हाल ही में एक अद्यतन किया
satyajit

@satyajit यह समाधान मेरे लिए एंड्रॉइड 7.1.1 पर Google पिक्सेल पर काम कर रहा है।
डिक लुकास

के साथ या बिना चरण 3 और 4?
सत्यजीत

-1

मैं एंड्रॉइड 7.1.1 पर हूं, यहां मैंने अपने डिवाइस (वनप्लस वन) पर कैसे सेटअप किया है - बिना किसी बदलाव के (मैं अपने ऐप के लिए एपीआई 21 को लक्षित कर रहा था):

चार्ल्स प्रॉक्सी में:

  1. Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser। यह चरण आपको प्रॉक्सी आईपी और पोर्ट नंबर देता है और यह लिंक भी देता है कि आपको चार्ट प्रॉक्सी SSL कहां डाउनलोड करना चाहिए।

आपके फोन पर:

  1. Wifi Settings > Modify Network > Advanced OptionsManualचार्ल्स से प्राप्त आईपी और पोर्ट नंबर को क्रमशः Proxy hostnameऔर Proxy portक्रमशः प्रॉक्सी सेट करें और दर्ज करें ।

  2. (वैकल्पिक) आप चार्ल्स द्वारा पहले प्रदान की गई chls.pro/ssl लिंक तक पहुंचने में सक्षम हो भी सकते हैं और नहीं भी । मेरे डिवाइस पर, मुझे हमेशा सूचित किया गया था कि मेरा कोई नेटवर्क कनेक्शन नहीं था। मैंने charlesproxy.com को Bypass proxy forफ़ील्ड में जोड़ा ।

  3. अपने ब्राउज़र पर, चरण 3 में लिंक पर जाएं और जो भी प्रमाण पत्र आवश्यक है उसे डाउनलोड करें (यदि यह क्रोम पर काम नहीं करता है, तो डॉल्फिन ब्राउज़र डाउनलोड करें)। आप अपने प्रमाणपत्र को जो भी नाम दे सकते हैं।

चार्ल्स प्रॉक्सी पर वापस:

  1. यदि आपकी सेटिंग आपको दूरस्थ कनेक्शन के लिए संकेत करने के लिए डिफ़ॉल्ट है, तो आपको प्रॉक्सी का उपयोग करने के लिए Allowया तो Denyअपने फ़ोन पर संकेत देना चाहिए ।

अब आप नूगट 7.1.1 पर चार्ल्स का उपयोग कर सकते हैं।

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