Android डिवाइस पर विश्वसनीय CA प्रमाणपत्र कैसे स्थापित करें?


134

मैंने अपना CA प्रमाणपत्र बनाया है और अब मैं इसे अपने Android Froyo डिवाइस (HTC Desire Z) पर स्थापित करना चाहता हूं, ताकि यह उपकरण मेरे प्रमाणपत्र पर भरोसा करे।

Android अपने जावा कीस्टोर में CA सर्टिफिकेट को स्टोर करता है /system/etc/security/cacerts.bks। मैंने फ़ाइल को अपने कंप्यूटर पर कॉपी किया, पोर्टेक्ले 1.5 का उपयोग करके अपना प्रमाणपत्र जोड़ा और इसे डिवाइस पर वापस धकेल दिया।

अब, Android स्वचालित रूप से फ़ाइल को पुनः लोड नहीं करता है। मैंने कई ब्लॉग पोस्ट में पढ़ा है कि मुझे डिवाइस को पुनरारंभ करने की आवश्यकता है। फ़ाइल में ऐसा करने से परिणाम मूल के साथ फिर से लिखे जा रहे हैं।

मेरी अगली कोशिश एसडी कार्ड से प्रमाणपत्र को कॉपी करके और सेटिंग मेनू से उसके अनुसार विकल्प का उपयोग करके स्थापित करना था। डिवाइस मुझे बताता है कि प्रमाणपत्र स्थापित किया गया है, लेकिन जाहिर है कि यह प्रमाण पत्र पर भरोसा नहीं करता है। इसके अलावा, जब मैं अपने कंप्यूटर पर कीस्टोर को कॉपी करने की कोशिश करता हूं, तब भी मुझे मूल स्टॉक मिल जाता है cacerts.bks

तो, एक विश्वसनीय प्रमाण पत्र के रूप में एंड्रॉइड 2.2 डिवाइस पर अपने स्वयं के रूट सीए प्रमाणपत्र स्थापित करने का सही तरीका क्या है? क्या इसे प्रोग्राम करने का कोई तरीका है?


आप यहां एक रूट किए गए फोन को मान सकते हैं। :)
ब्योर्न मार्शोल्लेक

जवाबों:


116

Android किटकैट से पहले आपको नए प्रमाणपत्र स्थापित करने के लिए अपने डिवाइस को रूट करना होगा।

एंड्रॉइड किटकैट (4.0) से नौगाट (7.0) तक यह संभव और आसान है। मैं अपने अन-रूट किए गए डिवाइस पर चार्ल्स वेब डिबगिंग प्रॉक्सी प्रमाणपत्र स्थापित करने और एसएसएल ट्रैफ़िक को सफलतापूर्वक सूँघने में सक्षम था।

Http://wiki.cacert.org/FAQ/ImportRootCert से निकालें

एंड्रॉइड वर्जन 4.0 से पहले, एंड्रॉइड वर्जन जिंजरब्रेड और फ्रायो के साथ, सभी सीए ('सिस्टम') सर्टिफिकेट्स के साथ ट्रस्ट स्टोर वाले एक एकल रीड-ओनली फाइल (/system/etc/security/cacerts.bks) थी। एंड्रॉयड। सिस्टम एसडी ऐप और एंड्रॉइड एसडीके के साथ विकसित सभी एप्लिकेशन इसका उपयोग करते हैं। Android जिंजरब्रेड, Froyo, पर CAcert प्रमाणपत्र स्थापित करने के लिए इन निर्देशों का उपयोग करें ...

एंड्रॉइड 4.0 (एंड्रॉइड आईसीएस / 'आइसक्रीम सैंडविच', एंड्रॉइड 4.3 'जेली बीन' और एंड्रॉइड 4.4 'किटकैट') से शुरू, सिस्टम विश्वसनीय प्रमाण पत्र फ़ोल्डर (/ सिस्टम / आदि) में (केवल पढ़ने के लिए) सिस्टम विभाजन पर हैं। सुरक्षा / 'व्यक्तिगत फ़ाइलों के रूप में। हालांकि, उपयोगकर्ता अब आसानी से अपने स्वयं के 'उपयोगकर्ता' प्रमाणपत्र जोड़ सकते हैं जो '/ डेटा / मिस / किचेन / सीट्स-जोड़ा' में संग्रहीत किया जाएगा।

सिस्टम-इंस्टॉल किए गए प्रमाणपत्रों को सेटिंग में Android डिवाइस पर प्रबंधित किया जा सकता है -> सुरक्षा -> प्रमाण पत्र -> 'System-खंड, जबकि उपयोगकर्ता विश्वसनीय प्रमाणपत्रों को' उपयोगकर्ता 'अनुभाग में उपयोग किया जाता है। उपयोगकर्ता विश्वसनीय प्रमाण पत्र का उपयोग करते समय, एंड्रॉइड एंड्रॉइड डिवाइस के उपयोगकर्ता को अतिरिक्त सुरक्षा उपायों को लागू करने के लिए मजबूर करेगा: उपयोगकर्ता द्वारा आपूर्ति किए गए प्रमाण पत्र का उपयोग करने पर डिवाइस को अनलॉक करने के लिए पिन-कोड, एक पैटर्न-लॉक या पासवर्ड का उपयोग अनिवार्य है।

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

एंड्रॉइड एन के बाद से इसे एक लिटलर कठिन हो जाता है, चार्ल्स प्रॉक्सी वेबसाइट से यह अर्क देखें :

एंड्रॉइड एन के रूप में, आपको अपने एप्लिकेशन को कॉन्फ़िगरेशन को जोड़ने की आवश्यकता है, ताकि चार्ल्स एसएसएक्स प्रॉक्सी द्वारा उत्पन्न एसएसएल प्रमाणपत्रों पर भरोसा किया जा सके। इसका मतलब है कि आप केवल उन ऐप्स के साथ एसएसएल प्रॉक्सी का उपयोग कर सकते हैं जिन्हें आप नियंत्रित करते हैं।

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

अपने ऐप में एक फ़ाइल Res / xml / network_security_config.xml जोड़ें:

<network-security-config>    
    <debug-overrides> 
        <trust-anchors> 
            <!-- Trust user added CAs while debuggable only -->
            <certificates src="user" /> 
        </trust-anchors>    
    </debug-overrides>  
</network-security-config>

फिर इस फ़ाइल के संदर्भ में अपने एप्लिकेशन के रूप में इस प्रकार जोड़ें:

<?xml version="1.0" encoding="utf-8"?> 
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config">
    </application> 
</manifest>

1
/system/etc/security/cacerts/*.0AVD को रिबूट / रीस्टार्ट करने के बाद मेरे कस्टम सर्टिफिकेट फाइल ( ) को बरकरार नहीं रखा गया है, इसलिए यह समाधान सफल नहीं था।
fikr4n

@BornToCode दिलचस्प - मैं शायद ही कभी एवीडी का उपयोग करता हूं इसलिए मुझे इस सीमा के बारे में पता नहीं था
डीन वाइल्ड

मैं सेटिंग देख रहा हूं debug-overrides, क्या इसका मतलब यह है कि यह network_security_configकेवल डिबग संस्करण को लक्षित कर रहा है? अगर मेरे पास अन्य संस्करण जैसे कि यूएटी संस्करण है तो यह अभ्यस्त काम है?
इसहाक

1
@ इकास का मतलब है कि यह किसी भी वेरिएंट पर लागू होगा जहां डिबगेबल = सच है
डीन वाइल्ड

1
@DeanWild - बहुत बहुत धन्यवाद! मैंने इस काम को हमेशा के लिए करने की कोशिश की और अपने ऐप को डीबग करते समय "अमान्य एसएसएल प्रमाणपत्र" प्राप्त करता रहा। इस समाधान ने सैमसंग नोट 8 पर एंड्रॉइड 9 पर चलने वाले मेरे एंड्रॉइड ऐप के लिए एक आकर्षण की तरह काम किया।
डेव ब्लैक

43

मैंने इस पर एक उत्तर खोजने की कोशिश में बहुत समय बिताया (मुझे आरएसएसएसएल प्रमाणपत्र देखने के लिए एंड्रॉइड की आवश्यकता है)। निष्कर्ष: एंड्रॉइड 2.1 और 2.2 आपको प्रमाण पत्र आयात करने की अनुमति देते हैं, लेकिन केवल वाईफाई और वीपीएन के साथ उपयोग के लिए। विश्वसनीय रूट प्रमाणपत्र की सूची को अपडेट करने के लिए कोई उपयोगकर्ता इंटरफ़ेस नहीं है, लेकिन उस सुविधा को जोड़ने के बारे में चर्चा है। यह स्पष्ट नहीं है कि cacerts.bks फ़ाइल को मैन्युअल रूप से अपडेट करने और बदलने के लिए एक विश्वसनीय समाधान है या नहीं।

विवरण और लिंक: http://www.mcbsys.com/techblog/2010/12/android-certports/ । उस पोस्ट में, एंड्रॉइड बग 11231 का लिंक देखें - आप उस बग में अपना वोट और क्वेरी जोड़ना चाह सकते हैं।


3
एक Android डेवलपर ने मेरे प्रश्न का उत्तर दिया। अद्यतन cacerts.bks: "2.3 में हालांकि सभी रिलीज में, एक गैर-रूट किए गए फोन पर cacerts.bks को अपडेट करने के लिए एक OTA की आवश्यकता होती है।" code.google.com/p/android/issues/detail?id=11231#c25 । ओटीए = ओवर-द-एयर, सही? क्या ऐसा हो सकता है कि आपका फ़ोन फ़ैक्टरी cacerts.bks पर वापस लौटा रहे? हालाँकि, यदि आपके पास रूट एक्सेस है, तो ऐसा लगता है कि आपको स्रोत कोड डाउनलोड करने, अपना प्रमाणपत्र जोड़ने में सक्षम होना चाहिए, फिर certimport.sh स्क्रिप्ट का उपयोग करके cacerts.bks का निर्माण करना चाहिए। android.git.kernel.org/?p=platform/libcore.git/a=tree=f=luni/…
मार्क बेरी

धन्यवाद। यह स्पष्ट रूप से उत्तर नहीं था जिसे मैं सुनना चाहता था, लेकिन सही प्रतीत होता है। मुझे उम्मीद थी कि पूरे सिस्टम को अपडेट किए बिना एक प्रमाण पत्र स्थापित करने का एक तरीका था। मैं निश्चित रूप से नए cacerts.bks का निर्माण कर सकता हूं, रूट एक्सेस के साथ मैं पुराने को भी बदल सकता हूं, लेकिन यह हर रिबूट के साथ मूल संस्करण पर निर्भर करता है। रिबूट किए बिना, एंड्रॉइड विश्वसनीय प्रमाण पत्र फ़ाइल को फिर से लोड करने से इनकार करने लगता है।
ब्योर्न मार्शोल्लेक

27
3.X और 4.X प्लेटफ़ॉर्म पर CA प्रमाणपत्र स्थापित करने के बारे में क्या?
आलोक कुलकर्णी


16

यदि आपको HTTPS कनेक्शन के लिए अपने प्रमाणपत्र की आवश्यकता है तो आप अपने आवेदन के लिए एक कच्चे संसाधन के रूप में .bks फ़ाइल जोड़ सकते हैं और DefaultHttpConnection का विस्तार कर सकते हैं, इसलिए आपके प्रमाणपत्र HTTPS कनेक्शन के लिए उपयोग किए जाते हैं।

public class MyHttpClient extends DefaultHttpClient {

    private Resources _resources;

    public MyHttpClient(Resources resources) {
        _resources = resources;
    }

    @Override
    protected ClientConnectionManager createClientConnectionManager() {
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory
            .getSocketFactory(), 80));
        if (_resources != null) {
            registry.register(new Scheme("https", newSslSocketFactory(), 443));
        } else {
            registry.register(new Scheme("https", SSLSocketFactory
                .getSocketFactory(), 443));
        }
        return new SingleClientConnManager(getParams(), registry);
    }

    private SSLSocketFactory newSslSocketFactory() {
        try {
            KeyStore trusted = KeyStore.getInstance("BKS");
            InputStream in = _resources.openRawResource(R.raw.mystore);
            try {
                trusted.load(in, "pwd".toCharArray());
            } finally {
                in.close();
            }
            return new SSLSocketFactory(trusted);
        } catch (Exception e) {
            throw new AssertionError(e);
        }
    }
}

आपके जवाब के लिए धन्यवाद। दरअसल, मुझे प्रमाण पत्र को इस तरह से स्थापित करने की आवश्यकता है कि डिवाइस पर प्रत्येक एप्लिकेशन प्रमाण पत्र पर भरोसा करता है। CAcert जैसे कुछ छोटे CA के लिए भी यही समस्या होनी चाहिए, जिनके प्रमाणपत्र डिफ़ॉल्ट रूप से विश्वसनीय नहीं हैं। वे अपने प्रमाणपत्र कैसे स्थापित करते हैं?
ब्योर्न मार्शोल्लेक

क्या आपने कोशिश की: सेटिंग्स -> सुरक्षा -> एसडी कार्ड से स्थापित करें
अलेक्जेंडर एगर

यह भी दिलचस्प हो सकता है: android.git.kernel.org/?p=platform/packages/apps/…
अलेक्जेंडर एगर

2
मेरे पास एक ही समस्या है, मुझे Adroid 2.3.3 एप्लिकेशन का उपयोग करके एक .PDX X509 प्रमाणपत्र लोड करना होगा और फिर SSL कनेक्शन बनाना होगा। किसी ने टिप्पणी कोड के साथ मेरी मदद कर सकते हैं?
AndroidLearner

9

यहां से जुड़ा गाइड कस्टम एसएसएल कनेक्टर की प्रोग्रामिंग की आवश्यकता के बिना मूल प्रश्न का उत्तर देगा।

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

मूल रूप से आपको इसकी आवश्यकता होगी:

  1. डाउनलोड: अपने फोन से cacerts.bks फ़ाइल।

    adb pull /system/etc/security/cacerts.bks cacerts.bks

  2. वह प्रमाणित प्राधिकारी से .crt फ़ाइल डाउनलोड करें जिसे आप अनुमति देना चाहते हैं।

  3. BouncyCastle प्रदाता का उपयोग करके अपने कंप्यूटर पर cacerts.bks फ़ाइल को संशोधित करें

  4. अपने फोन पर वापस cacerts.bks फ़ाइल अपलोड करें और रिबूट करें।

यहां पहले एंड्रॉइड फोन को अपडेट करने के लिए कदम से एक अधिक विस्तृत कदम है: प्री-एंड्रॉइड 4.0 डिवाइस पर HTTPS सुरक्षा प्रमाणपत्र प्राधिकरण कीस्टोर को कैसे अपडेट किया जाए


5

यहां पोस्ट किए गए या संबंधित थ्रेड्स की तुलना में MUCH का आसान समाधान है। यदि आप एक वेबव्यू (जैसा मैं हूं) का उपयोग कर रहे हैं, तो आप इसके भीतर एक JAVASCRIPT फ़ंक्शन को निष्पादित करके इसे प्राप्त कर सकते हैं। यदि आप एक वेबव्यू का उपयोग नहीं कर रहे हैं, तो आप इस उद्देश्य के लिए एक छिपा हुआ बनाना चाह सकते हैं। यहां एक ऐसा फ़ंक्शन है जो सीए इंस्टॉलेशन को किक करने के लिए किसी भी ब्राउज़र (या वेबव्यू) के बारे में काम करता है (आम तौर पर साझा ओएस प्रमाणित भंडार के माध्यम से, जिसमें एक Droid भी शामिल है)। यह iFrames के साथ एक अच्छी चाल का उपयोग करता है। बस इस फ़ंक्शन के लिए .lrt फ़ाइल में url पास करें:

function installTrustedRootCert( rootCertUrl ){
    id = "rootCertInstaller";
    iframe = document.getElementById( id );
    if( iframe != null ) document.body.removeChild( iframe );
    iframe = document.createElement( "iframe" );
    iframe.id = id;
    iframe.style.display = "none";
    document.body.appendChild( iframe );
    iframe.src = rootCertUrl;
}

अपडेट करें:

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

 public static void installTrustedRootCert( final String certAddress ){
     WebView certWebView = new WebView( instance_ );
     certWebView.loadUrl( certAddress );
 }

ध्यान दें कि Inst_ गतिविधि का एक संदर्भ है। यह पूरी तरह से काम करता है यदि आप प्रमाणपत्र को यूआरएल जानते हैं। मेरे मामले में, हालांकि, मैं उस गतिशील रूप से सर्वर साइड सॉफ्टवेयर के साथ हल करता हूं। मुझे पुनर्निर्देशन url को इंटरसेप्ट करने के लिए अतिरिक्त कोड की एक उचित मात्रा में जोड़ना पड़ा और इसे इस तरीके से कॉल करना पड़ा, जो एक थ्रेडिंग जटिलता के आधार पर क्रैश का कारण नहीं बना, लेकिन मैं यहां वह सब भ्रम नहीं जोड़ूंगा ...


3

मैंने शुरुआत के प्रमाणपत्रों का उपयोग करने के लिए जो किया वह काफी आसान था। (मेरे रूट किए गए फोन पर)

मैंने अपने sdcard को /system/etc/security/cacerts.bks कॉपी किया

डाउनलोड http://www.startssl.com/certs/ca.crt और http://www.startssl.com/certs/sub.class1.server.ca.crt

Portecle.sourceforge.net पर चला गया और सीधे वेबपेज से पोर्टेक्ले चला गया।

मेरे sdcard से मेरी cacerts.bks फ़ाइल खोली (पासवर्ड के लिए पूछे जाने पर कुछ भी दर्ज नहीं किया गया)

पोर्टकॉल में आयात चुनें और सब.class1.server.ca.crt खोला, मेरे केस को पहले से ही ca.crt किया था, लेकिन शायद आपको वह भी इंस्टॉल करने की जरूरत है।

कीस्टोर को सहेजा और इसे baxck को /system/etc/security/cacerts.bks पर कॉपी किया (मैंने उस फ़ाइल का बैकअप पहले मामले में ही बनाया)

मेरे फोन को रिबूट किया और अब मैं अपनी साइट को बिना किसी त्रुटि के एक startsl प्रमाण पत्र का उपयोग करके निकाल सकता हूं।



किसी भी विचार कैसे एक गैर निहित डिवाइस पर वापस cacert.bks डाल करने के लिए?
बॉब

1

इन चरणों ने मेरे लिए काम किया:

  1. अपने मोबाइल डिवाइस पर डॉरी सर्टिफिकेट एंड्रॉइड ऐप इंस्टॉल करें: https://play.google.com/store/apps/details?id=io.tempage.dorycert&hl=en_US
  2. USB केबल के साथ मोबाइल डिवाइस को लैपटॉप से ​​कनेक्ट करें।
  3. आंतरिक फोन मेमोरी पर रूट फ़ोल्डर बनाएं, उस फ़ोल्डर में प्रमाणपत्र फ़ाइल की प्रतिलिपि बनाएँ और केबल को डिस्कनेक्ट करें।
  4. डोरी प्रमाणपत्र Android ऐप खोलें, गोल [+] बटन पर क्लिक करें और सही आयात फ़ाइल प्रमाणपत्र विकल्प चुनें।
  5. प्रारूप का चयन करें, एक नाम प्रदान करें (मैंने फ़ाइल नाम के समान टाइप किया है), प्रमाणपत्र फ़ाइल ब्राउज़ करें और [ओके] पर क्लिक करें।
  6. तीन कार्ड की सूची होगी मैंने उस कार्ड को नजरअंदाज कर दिया जिसमें केवल [SIGN CSR] बटन था और दो अन्य कार्डों पर [INSTALL] बटन पर क्लिक करने के लिए आगे बढ़ा।
  7. मैंने पीडब्ल्यूए वेब ऐप को रीफ्रेश किया था, मैंने अपना मोबाइल क्रोम नहीं खोला था (यह एक स्थानीय आईआईएस वेब सर्वर पर होस्ट किया गया है) और वोला! कोई क्रोम चेतावनी संदेश नहीं। हरे रंग का ताला था। यह काम कर रहा था।

वैकल्पिक रूप से, मुझे ये विकल्प मिले जिनकी मुझे स्वयं कोशिश करने की कोई आवश्यकता नहीं थी, लेकिन इसका पालन करना आसान था:

अंत में, यह प्रासंगिक नहीं हो सकता है, लेकिन यदि आप एक स्थानीय IIS वेब सर्वर पर होस्ट किए गए अपने PWA ऐप (वेबसाइट) के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र (mkcert के साथ) बनाना और सेटअप करना चाह रहे हैं, तो मैंने इस पृष्ठ का अनुसरण किया:

https://medium.com/@aweber01/locally-trusted-development-certificates-with-mkcert-and-iis-e09410d92031

धन्यवाद और आशा है कि यह मदद करता है !! :)


0

यहां एक वैकल्पिक समाधान है जो वास्तव में आपके प्रमाणपत्र को डिफ़ॉल्ट प्रमाणपत्र की सूची में बनाया गया है: HTTPS के लिए HttpClient का उपयोग करके सभी प्रमाणपत्रों पर भरोसा करना

हालाँकि, यह केवल आपके आवेदन के लिए काम करेगा। उपयोगकर्ता के डिवाइस पर सभी अनुप्रयोगों के लिए प्रोग्रामेटिक रूप से करने का कोई तरीका नहीं है, क्योंकि यह एक सुरक्षा जोखिम होगा।


0

यदि आपके पास कोई रूटेड डिवाइस है, तो आप उपयोगकर्ता सेर्ट्स को सिस्टम पर ले जाने के लिए एक Magisk मॉड्यूल का उपयोग कर सकते हैं, इसलिए यह विश्वसनीय प्रमाणपत्र होगा

https://github.com/yochananmarqos/Move-Certificates

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