डिबगिंग प्रतिबंध नियंत्रक एकीकरण गाइड

AAOS डिबगिंग प्रतिबंध नियंत्रक (DRC) को एकीकृत करने के लिए इस पृष्ठ पर दिए गए निर्देशों का उपयोग करें।

चित्र 1. डीआरसी ऐप उदाहरण।

वास्तुकला

डीआरसी आर्किटेक्चर को चित्र 2 में चित्रित किया गया है। लाल रंग में उल्लिखित घटकों (टोकन जारीकर्ता और डीआरसी) के साथ संदर्भ कार्यान्वयन हैं जिन्हें आप अनुकूलित कर सकते हैं।

चित्र 2. डीआरसी वास्तुकला।

डीआरसी क्या है?

कार हेड यूनिट में DRC ऐप शामिल है ( packages/apps/Car/DebuggingRestrictionController में संदर्भ कार्यान्वयन देखें)। संदर्भ ऐप में टोकन जारीकर्ता से एक्सेस टोकन प्राप्त करने, टोकन को मान्य करने और फिर टोकन में निर्दिष्ट डिबगिंग प्रतिबंध परिवर्तनों को लागू करने के तर्क शामिल हैं। तर्क में कार के किनारे पर बुनियादी यूएक्स तत्व शामिल हैं।

टोकन जारीकर्ता क्या है?

यह एक वेब सेवा है जो क्रिप्टोग्राफ़िक रूप से हस्ताक्षरित एक्सेस टोकन जारी करती है ( packages/apps/Car/DebuggingRestrictionController/server में संदर्भ कार्यान्वयन देखें)। संदर्भ वेब सेवा एक परिनियोजन योग्य फ़ायरबेस क्लाउड फ़ंक्शन है (अधिक जानने के लिए, फ़ायरबेस के लिए क्लाउड फ़ंक्शंस देखें)।

आवश्यक शर्तें

संदर्भ कार्यान्वयन को तैनात करने से पहले, निम्नलिखित कार्यों को पूरा करना सुनिश्चित करें।

एक्सेस टोकन पर हस्ताक्षर करने के लिए प्रमाणपत्र तैयार करें

टोकन जारीकर्ता एक्सेस टोकन के रूप में JSON वेब सिग्नेचर (JWS) उत्पन्न करता है। इष्टतम अनुकूलता के लिए, संदर्भ जारीकर्ता केवल RS256 एल्गोरिथ्म (SHA256 के साथ RSA हस्ताक्षर) का समर्थन करता है। कुंजी रोटेशन की सुविधा के लिए, एक्सेस टोकन पर हस्ताक्षर करने के लिए एकल प्रमाणपत्र के बजाय प्रमाणपत्र श्रृंखला का उपयोग करें। एक विशिष्ट प्रमाणपत्र श्रृंखला में एक रूट सीए प्रमाणपत्र, एक मध्यवर्ती सीए प्रमाणपत्र और एक अंत-इकाई प्रमाणपत्र शामिल होना चाहिए।

JWS टोकन पर हस्ताक्षर करने वाला अंतिम-इकाई प्रमाणपत्र मानक TLS प्रमाणपत्र से अलग नहीं है। आप या तो डिजीसर्ट जैसे सार्वजनिक सीए से प्रमाणपत्र खरीद सकते हैं या स्व-हस्ताक्षरित रूट सीए प्रमाणपत्र या हार्डवेयर सुरक्षा मॉड्यूल का उपयोग करके अपनी स्वयं की प्रमाणपत्र श्रृंखला बनाए रख सकते हैं। अंत-इकाई प्रमाणपत्र एक विषय वैकल्पिक नाम (SAN) एक्सटेंशन के साथ X509v3 प्रमाणपत्र होना चाहिए। SAN एक्सटेंशन में टोकन जारीकर्ता का एक पहचानकर्ता (उदाहरण के लिए, होस्टनाम) होता है। अंत में, आरएसए प्रमाणपत्रों को ईसी प्रमाणपत्रों से अधिक प्राथमिकता दी जानी चाहिए क्योंकि टोकन जारीकर्ता केवल आरएस256 का समर्थन करता है।

Google packages/apps/Car/DebuggingRestrictionController/server/genkey.sh में स्व-हस्ताक्षरित प्रमाणपत्र बनाने के लिए एक शेल स्क्रिप्ट प्रदान करता है।

फायरबेस सेट करें

संदर्भ टोकन जारीकर्ता फायरबेस प्रमाणीकरण और फायरबेस क्लाउड फ़ंक्शन का उपयोग करता है।

अपना फायरबेस खाता सेट करने के लिए:

  1. फायरबेस प्रोजेक्ट बनाने के लिए, अपने एंड्रॉइड प्रोजेक्ट में फायरबेस जोड़ें देखें।
  2. कुछ फ़ायरबेस प्रमाणीकरणकर्ताओं को सक्षम करने के लिए, मैं फ़ायरबेस प्रमाणीकरण कहाँ से शुरू करूँ? देखें। .
  3. एक खाली फायरबेस क्लाउड फ़ंक्शन जोड़ने के लिए, प्रारंभ करें देखें।
  4. यदि पहले से नहीं किया गया है, तो टोकन जारीकर्ता को संकलित और तैनात करने के लिए Node.js , NPM और Firebase टूल इंस्टॉल करें।

डीआरसी ऐप को एकीकृत करें

संदर्भ DRC ऐप packages/apps/Car/DebuggingRestrictionController में स्थित है। ऐप को Soong के साथ AOSP में बंडल किया जा सकता है या Gradle के साथ अनबंडल किया जा सकता है

बंडल निर्माण

एक बंडल ऐप बनाने के लिए:

  1. google-services.json से applicationId , projectId , और apiKey packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java में कॉपी करें। ऐसा करने से DRC ऐप फायरबेस से सही ढंग से कनेक्ट होने में सक्षम हो जाता है।
  2. इन स्थिरांकों को packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java में अपडेट करें:
    • TOKEN_USES_SELF_SIGNED_CA इंगित करता है कि क्या स्व-हस्ताक्षरित रूट CA प्रमाणपत्र का उपयोग किया जाता है। यदि सक्षम किया गया है, तो DRC ऐप केवल ROOT_CA_CERT में निर्दिष्ट PEM-एन्कोडेड रूट CA प्रमाणपत्र पर भरोसा करता है।
    • TOKEN_ISSUER_API_NAME फायरबेस क्लाउड फ़ंक्शन का नाम है और इसे आपके द्वारा पहले फायरबेस कंसोल में बनाए गए क्लाउड फ़ंक्शन से मेल खाना चाहिए।
    • TOKEN_ISSUER_HOSTNAME अंतिम इकाई प्रमाणपत्र में विषय वैकल्पिक नाम से मेल खाना चाहिए जो एक्सेस टोकन पर हस्ताक्षर करेगा।
    • DRC_TEST_EMAIL और DRC_TEST_PASSWORD एक वैकल्पिक परीक्षण खाते के लिए क्रेडेंशियल हैं, जिन्हें यदि आपने ईमेल/पासवर्ड साइन-इन सक्षम किया है तो फायरबेस में पूर्व-प्रावधान किया जा सकता है। इनका उपयोग केवल यंत्रीकृत परीक्षणों के लिए किया जाता है।

ऐप अब आपके फायरबेस खाते और आपके प्रमाणपत्रों का उपयोग करने के लिए कॉन्फ़िगर किया गया है। एंड्रॉइड 9 और उच्चतर में, आपको विशेषाधिकार प्राप्त अनुमति अनुमति सूची सेट करनी होगी। अनुमति सूची में कम से कम android.permission.MANAGE_USERS शामिल होना चाहिए। उदाहरण के लिए:

<permissions>
  <privapp-permissions package="com.android.car.debuggingrestrictioncontroller">
    <permission name="android.permission.INTERNET"/>
    <permission name="android.permission.MANAGE_USERS"/>
  </privapp-permissions>
</permissions>

असंबद्ध निर्माण

अनबंडल्ड डीआरसी ऐप को संकलित करने के लिए ग्रैडल का उपयोग करता है।

एक असंबद्ध बिल्ड बनाने के लिए:

  1. पुष्टि करें कि आपने Android SDK इंस्टॉल कर लिया है.
  2. ऐप की रूट डायरेक्टरी में local.properties नामक एक टेक्स्ट फ़ाइल बनाएं।
  3. Android SDK का स्थान सेट करें:
     sdk.dir=path/to/android/sdk
    
  4. फायरबेस सेट करने के लिए, google-services.json packages/apps/Car/DebuggingRestrictionController/app पर कॉपी करें। ग्रैडल फ़ाइल को पार्स करता है और बाकी को स्वचालित रूप से सेट करता है।
  5. पर्यावरण चर को परिभाषित करें। बंडल बिल्ड की तरह, आपको निर्दिष्ट करना होगा:
    • $TOKEN_USES_SELF_SIGNED_CA : सही या गलत;
    • $ROOT_CA_CERT : PEM-एन्कोडेड रूट CA प्रमाणपत्र का पथ;
    • $TOKEN_ISSUER_API_NAME : फायरबेस क्लाउड फ़ंक्शन का नाम;
    • $TOKEN_ISSUER_HOST_NAME : प्रमाणपत्र में SAN;
    • $DRC_TEST_EMAIL और $DRC_TEST_EMAI L: परीक्षण खाते के लिए क्रेडेंशियल, केवल डीबग बिल्ड।
  6. ग्रैडल के साथ ऐप बनाने के लिए, इस तरह एक कमांड चलाएँ:
    $ ./gradlew build
    

टोकन जारीकर्ता को एकीकृत करें

संदर्भ टोकन जारीकर्ता Node.js में कार्यान्वित एक फायरबेस क्लाउड फ़ंक्शन है। फ़ंक्शन को केवल एक प्रमाणित उपयोगकर्ता द्वारा ही कॉल किया जा सकता है। ऐप को तैनात करने से पहले, आपको JWS टोकन पर हस्ताक्षर करने के लिए उपयोग की जाने वाली निजी कुंजी और प्रमाणपत्र सेट करना होगा।

  1. निम्नलिखित सामग्री के साथ एक JSON फ़ाइल भरें:
    {
        "key": "---BEGIN PRIVATE KEY---\nRSA_PRIVATE_KEY\n-----END PRIVATE KEY-----\n",
        "certificates.0": "-----BEGIN CERTIFICATE-----\nTOKEN_SIGNING_CERT\n-----END CERTIFICATE-----\n",
        "certificates.1": "-----BEGIN CERTIFICATE-----\nINTERMEDIATE_CA_CERT\n-----END CERTIFICATE-----\n",
        "certificates.2": "-----BEGIN CERTIFICATE-----\nROOT_CA_CERT\n-----END CERTIFICATE-----\n",
        "expiration": "30m",
        "issuer": "Debugging Access Token Issuer",
        "audience": "IHU"
    }
    

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

  2. कॉन्फ़िगरेशन को फ़ायरबेस पर अपलोड करें:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. फायरबेस क्लाउड फ़ंक्शन परिनियोजित करें:
  5. $ firebase deploy --only functions
    
  6. अपने टोकन जारीकर्ता को प्रबंधित और मॉनिटर करने के लिए, फ़ंक्शंस परिनियोजन और रनटाइम विकल्प प्रबंधित करें देखें।

डिफ़ॉल्ट प्रतिबंध सेट करें

डिफ़ॉल्ट प्रतिबंध पहले बूट से पहले लागू किए जा सकते हैं। एंड्रॉइड फ्रेमवर्क में डिफ़ॉल्ट को ओवरराइड करने के लिए स्थिर संसाधन ओवरले के साथ ऐसा करें। विभिन्न प्रकार के उपयोगकर्ताओं पर क्रमशः प्रतिबंध लागू किये जा सकते हैं। विभिन्न प्रकार के उपयोगकर्ताओं के बारे में जानने के लिए, बहु-उपयोगकर्ता सहायता देखें।

हेडलेस सिस्टम उपयोगकर्ता के लिए डिफ़ॉल्ट प्रतिबंध को frameworks/base/core/res/res/values/config.xml में config_defaultFirstUserRestrictions स्ट्रिंग-सरणी के साथ कॉन्फ़िगर किया जा सकता है। इस प्रतिबंध को सेट करने से प्रतिबंध हटाए जाने तक एंड्रॉइड डीबग ब्रिज (एडीबी) स्वचालित रूप से अक्षम हो जाता है, उदाहरण के लिए:

<string-array translatable="false" name="config_defaultFirstUserRestrictions">
  <item>no_debugging_features</item>
</string-array>

नियमित उपयोगकर्ताओं (उदाहरण के लिए, ड्राइवर और यात्री) और मेहमानों के लिए डिफ़ॉल्ट प्रतिबंध frameworks/base/core/res/res/xml/config_user_types.xml में कॉन्फ़िगर किए जा सकते हैं। आप प्रत्येक प्रकार के उपयोगकर्ता पर क्रमशः डिफ़ॉल्ट प्रतिबंध सेट करने के लिए इन स्ट्रिंग्स को ओवरले कर सकते हैं, उदाहरण के लिए:

<user-types>
  <full-type name="android.os.usertype.full.SECONDARY" >
    <default-restrictions no_debugging_features="true"/>
  </full-type>
  <full-type name="android.os.usertype.full.GUEST" >
    <default-restrictions no_debugging_features="true"/>
  </full-type>
</user-types>