راهنمای ادغام کنترل کننده محدودیت اشکال زدایی

از دستورالعمل های این صفحه برای ادغام کنترل کننده محدودیت اشکال زدایی AAOS (DRC) استفاده کنید.

شکل 1. مثال برنامه DRC.

معماری

معماری DRC در شکل 2 نشان داده شده است. اجزای مشخص شده با رنگ قرمز (صادرکننده نشانه و DRC) پیاده سازی مرجع همراهی دارند که می توانید آنها را سفارشی کنید.

شکل 2. معماری DRC.

DRC چیست؟

واحد سر خودرو شامل برنامه DRC است (به پیاده‌سازی مرجع در packages/apps/Car/DebuggingRestrictionController مراجعه کنید). برنامه مرجع شامل منطق دریافت رمز دسترسی از صادرکننده توکن، اعتبارسنجی توکن و سپس اعمال تغییرات محدودیت اشکال زدایی همانطور که در توکن مشخص شده است. منطق شامل عناصر اولیه UX در سمت ماشین است.

صادرکننده توکن چیست؟

این یک سرویس وب است که نشانه‌های دسترسی امضاشده رمزنگاری شده را صادر می‌کند (به پیاده‌سازی مرجع در packages/apps/Car/DebuggingRestrictionController/server مراجعه کنید). وب سرویس مرجع یک تابع Firebase Cloud قابل استقرار است (برای اطلاعات بیشتر، به Cloud Functions for Firebase مراجعه کنید).

پیش نیازها

قبل از استقرار یک پیاده سازی مرجع، حتماً کارهای زیر را تکمیل کنید.

گواهینامه هایی را برای امضای نشانه های دسترسی آماده کنید

صادرکننده توکن، امضاهای وب JSON (JWS) را به عنوان توکن های دسترسی تولید می کند. برای سازگاری بهینه، صادرکننده مرجع فقط از الگوریتم RS256 (امضای RSA با SHA256) پشتیبانی می کند. برای تسهیل چرخش کلید، از یک زنجیره گواهی به جای یک گواهی واحد برای امضای نشانه های دسترسی استفاده کنید. یک زنجیره گواهی معمولی باید از یک گواهی CA ریشه، یک گواهی CA میانی و یک گواهی موجودیت نهایی تشکیل شود.

گواهی موجودیت نهایی امضاکننده توکن های JWS هیچ تفاوتی با گواهی استاندارد TLS ندارد. می‌توانید گواهی را از CAهای عمومی مانند DigiCert خریداری کنید یا با استفاده از گواهینامه‌های CA ریشه خودامضا یا ماژول‌های امنیتی سخت‌افزار، زنجیره گواهی خود را حفظ کنید. گواهی موجودیت نهایی باید یک گواهی X509v3 با پسوند نام جایگزین موضوع (SAN) باشد. پسوند SAN حاوی یک شناسه (به عنوان مثال، نام میزبان) صادرکننده رمز است. در نهایت، گواهی‌های RSA باید بر گواهی‌های EC ترجیح داده شوند زیرا صادرکننده توکن فقط از RS256 پشتیبانی می‌کند.

Google یک پوسته اسکریپت برای تولید گواهی‌های خودامضا در packages/apps/Car/DebuggingRestrictionController/server/genkey.sh ارائه می‌کند.

Firebase را راه اندازی کنید

صادرکننده نشانه مرجع از احراز هویت Firebase و تابع ابری Firebase استفاده می کند.

برای راه‌اندازی حساب Firebase:

  1. برای ایجاد یک پروژه Firebase، به افزودن Firebase به پروژه Android خود مراجعه کنید.
  2. برای فعال کردن برخی از احراز هویت Firebase، ببینید از کجا باید با Firebase Authentication شروع کنم؟ .
  3. برای افزودن یک تابع خالی Firebase Cloud، به شروع به کار مراجعه کنید.
  4. اگر قبلاً انجام نشده است، ابزارهای Node.js ، NPM و Firebase را برای کامپایل و استقرار صادرکننده توکن نصب کنید.

برنامه DRC را ادغام کنید

برنامه مرجع DRC در packages/apps/Car/DebuggingRestrictionController قرار دارد. این برنامه را می توان به صورت همراه در AOSP با Soong یا جداسازی با Gradle ساخت.

ساخت همراه

برای ساخت یک برنامه همراه:

  1. applicationId ، projectId و apiKey از google-services.json در packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java کپی کنید. با انجام این کار، برنامه DRC به درستی به Firebase متصل می شود.
  2. این ثابت ها را در packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java به روز کنید:
    • TOKEN_USES_SELF_SIGNED_CA نشان می دهد که آیا از گواهینامه های CA ریشه خودامضا استفاده می شود. اگر فعال باشد، برنامه DRC فقط به گواهینامه CA ریشه با رمزگذاری PEM که در ROOT_CA_CERT مشخص شده است اعتماد دارد.
    • TOKEN_ISSUER_API_NAME نام تابع Firebase Cloud است و باید با تابع Cloud که قبلاً در Firebase Console ایجاد کردید مطابقت داشته باشد.
    • TOKEN_ISSUER_HOSTNAME باید با نام جایگزین موضوع در گواهی موجودیت نهایی که نشانه‌های دسترسی را امضا می‌کند مطابقت داشته باشد.
    • DRC_TEST_EMAIL و DRC_TEST_PASSWORD اعتبارنامه‌های یک حساب آزمایشی اختیاری هستند که اگر ورود به سیستم ایمیل/گذرواژه را فعال کرده باشید، می‌توانند از قبل در Firebase تهیه شوند. اینها فقط برای تست های ابزاری استفاده می شوند.

اکنون برنامه برای استفاده از حساب Firebase و گواهی‌های شما پیکربندی شده است. در Android 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>

ساخت بدون بسته

بیلدهای DRC Unbundled از Gradle برای کامپایل برنامه استفاده می کنند.

برای ایجاد یک بیلد unbundled:

  1. تأیید کنید که Android SDK را نصب کرده اید.
  2. یک فایل متنی با نام local.properties در فهرست اصلی برنامه ایجاد کنید.
  3. مکان Android SDK را تنظیم کنید:
     sdk.dir=path/to/android/sdk
    
  4. برای راه اندازی Firebase، google-services.json در packages/apps/Car/DebuggingRestrictionController/app کپی کنید. Gradle فایل را تجزیه می کند و بقیه را به طور خودکار تنظیم می کند.
  5. متغیرهای محیطی را تعریف کنید. مانند ساخت های همراه، باید مشخص کنید:
    • $TOKEN_USES_SELF_SIGNED_CA : درست یا نادرست.
    • $ROOT_CA_CERT : مسیر به گواهینامه CA ریشه رمزگذاری شده با PEM.
    • $TOKEN_ISSUER_API_NAME : نام تابع Firebase Cloud.
    • $TOKEN_ISSUER_HOST_NAME : SAN در گواهی.
    • $DRC_TEST_EMAIL و $DRC_TEST_EMAI L: اعتبارنامه‌های یک حساب آزمایشی، فقط ساخت‌های اشکال زدایی.
  6. برای ساخت برنامه با Gradle، دستوری مانند این را اجرا کنید:
    $ ./gradlew build
    

صادرکننده توکن را ادغام کنید

صادرکننده نشانه مرجع یک تابع ابری Firebase است که در 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"
    }
    

    گواهینامه ها ابتدا با گواهی موجودیت نهایی و گواهی CA ریشه در پایان سفارش داده می شوند. دوره انقضا قابل تنظیم است و اگر توکن صادر شده مدتی طول بکشد تا بتواند توسط یک برنامه DRC دریافت و مصرف شود، می توان آن را به مدت طولانی تری تنظیم کرد. لغو رمز پشتیبانی نمی شود.

  2. پیکربندی را در Firebase آپلود کنید:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. استقرار تابع Firebase Cloud:
  5. $ firebase deploy --only functions
    
  6. برای مدیریت و نظارت بر صادرکننده رمز خود، به مدیریت استقرار توابع و گزینه‌های زمان اجرا مراجعه کنید.

محدودیت های پیش فرض را تنظیم کنید

محدودیت های پیش فرض را می توان قبل از اولین بوت اعمال کرد. این کار را با همپوشانی منابع استاتیک انجام دهید تا پیش‌فرض‌های موجود در چارچوب Android را لغو کنید. محدودیت ها را می توان به ترتیب بر روی انواع مختلف کاربران اعمال کرد. برای آشنایی با انواع مختلف کاربران، به پشتیبانی چند کاربره مراجعه کنید.

محدودیت پیش‌فرض برای کاربر سیستم هدلس را می‌توان با آرایه رشته‌ای config_defaultFirstUserRestrictions در frameworks/base/core/res/res/values/config.xml پیکربندی کرد. تنظیم این محدودیت به طور خودکار Android Debug Bridge (ADB) را تا زمانی که محدودیت حذف نشود غیرفعال می کند، به عنوان مثال:

<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>