Hata Ayıklama Kısıtlama Denetleyicisi entegrasyon kılavuzu

AAOS Hata Ayıklama Kısıtlaması Denetleyicisi'ni entegre etmek için bu sayfadaki talimatları kullanın. (DKC).

Şekil 1. DRC uygulama örneği.

Mimari

DRC mimarisi Şekil 2'de gösterilmektedir. Kırmızıyla gösterilen bileşenler (jetonu veren ve DRC) size eşlik eden referans uygulamaları bulunur. Bu uygulamaları özelleştirebilirsiniz.

Şekil 2. DRC mimarisi.

Demokratik Kongo Cumhuriyeti nedir?

Araba ana birimi, DRC uygulamasını içerir (referans uygulamaya şuradan bakın: packages/apps/Car/DebuggingRestrictionController) bilgileri gösterilir. Referans uygulamanın içeriği: jetonu veren kuruluştan erişim jetonu alma, jetonu doğrulama ve jetonları doğrulama mantığı Ardından, jetonda belirtilen şekilde hata ayıklama kısıtlama değişikliklerini uygulayın. Mantık, araba tarafında temel kullanıcı deneyimi öğeleri.

Jetonu veren kuruluş nedir?

Bu, kriptografik olarak imzalanmış erişim jetonları veren bir web hizmetidir (bkz. (packages/apps/Car/DebuggingRestrictionController/server içindeki işlemler) ekleyebilirsiniz. Referans web hizmeti, dağıtılabilir bir Firebase Cloud işlevidir (daha fazla bilgi edinmek için Şunun için Cloud Functions: Firebase) seçin.

Ön koşullar

Referans uygulamasını dağıtmadan önce aşağıdaki görevleri tamamladığınızdan emin olun.

Erişim jetonlarını imzalamak için sertifikalar hazırlama

Jetonu veren kuruluş, erişim jetonları olarak JSON Web İmzaları (JWS) oluşturur. Optimum için referans veren kuruluş yalnızca RS256 algoritmasını (SHA256 ile RSA imzaları) destekler. Anahtar rotasyonunu kolaylaştırmak için, imzalanırken tek bir sertifika yerine bir sertifika zinciri kullanın erişim jetonlarıdır. Tipik bir sertifika zinciri bir kök CA sertifikası, bir ara CA sertifikası ve bir son varlık sertifikası.

JWS jetonlarını imzalayan son varlık sertifikası, standart bir TLS'den farklı değildir sertifikası. DigiCert gibi genel CA'lardan bir sertifika satın alabilir veya kendi sertifika zincirinizi oluşturarak kendinden imzalı kök CA sertifikalarını veya Donanım Güvenlik Modüllerini kullanabilirsiniz. Son varlık sertifikası, Konu Alternatif Adı olan bir X509v3 sertifikası olmalıdır (SAN) uzantısından yararlanın. SAN uzantısı, jetonun tanımlayıcısını (örneğin, ana makine adı) içerir sağlayan taraftır. Son olarak, RSA sertifikaları EC sertifikaları yerine kart veren kuruluş yalnızca RS256'yı destekler.

Google, kendinden imzalı sertifikaları oluşturmak için bir kabuk komut dosyası sağlar packages/apps/Car/DebuggingRestrictionController/server/genkey.sh

Firebase'i ayarlayın

Referans jetonu veren kuruluş, Firebase Authentication ve Firebase Cloud Functions işlevi.

Firebase hesabınızı oluşturmak için:

  1. Firebase projesi oluşturmak için şuraya bakın: Firebase'i şuraya ekle: ekleyebilirsiniz.
  2. Bazı Firebase kimlik doğrulayıcılarını etkinleştirmek için Nereden Firebase Authentication ile başlamak ister misiniz?.
  3. Boş bir Firebase Cloud işlevi eklemek için Başlatıldı.
  4. Henüz yapmadıysanız derleme yapmak için Node.js, NPM ve Firebase araçlarını yükleyin ve Jetonu vereni dağıtabilir.

DRC uygulamasını entegre edin

Referans DRC uygulaması şuradadır: packages/apps/Car/DebuggingRestrictionController Uygulama geliştirilebilir. paket ve AOSP'de Soong veya Gradle ile gruplandırılmamış.

Paket derleme

Paket halinde sunulan bir uygulama oluşturmak için:

  1. applicationId, projectId ve apiKey öğelerini kopyalayın google-services.json dilinden şu dile: packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java. Bu sayede DRC uygulaması Firebase'e doğru şekilde bağlanabilir.
  2. Bu sabit değerleri packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java:
    • TOKEN_USES_SELF_SIGNED_CA, kendinden imzalı kök CA sertifikalarının kullanılır. Bu ayar etkinleştirilirse DRC uygulaması yalnızca şu adreste belirtilen PEM kodlu kök CA sertifikasına güvenir: ROOT_CA_CERT
    • TOKEN_ISSUER_API_NAME, Firebase Cloud işlevinin adıdır ve Firebase konsolunda daha önce oluşturduğunuz Cloud işleviyle eşleştirin.
    • TOKEN_ISSUER_HOSTNAME, alan adındaki Konu Alternatif Adı ile eşleşmelidir son varlık sertifikasının yerini alır.
    • DRC_TEST_EMAIL ve DRC_TEST_PASSWORD, şunun kimlik bilgileridir: etkinleştirdiyseniz Firebase'de önceden temel hazırlığı yapılabilecek isteğe bağlı test hesabı E-posta/Şifre ile oturum açın. Bunlar yalnızca araçlı testler için kullanılır.

Uygulama artık Firebase hesabınızı ve sertifikalarınızı kullanacak şekilde yapılandırılmıştır. Android 9 ve sonraki sürümlerde ayrıcalıklı izinleri izin verilenler listesine ekleme hakkında daha fazla bilgi edinin. İzin verilenler listesi en az android.permission.MANAGE_USERS içermelidir. Örnek:

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

Gruplandırılmamış derleme

Gruplandırılmamış DRC derlemeleri, uygulamayı derlemek için Gradle'ı kullanır.

Gruplandırılmamış bir derleme oluşturmak için:

  1. Android SDK'sını yüklediğinizi onaylayın.
  2. Uygulamanın kök dizininde local.properties adlı bir metin dosyası oluşturun.
  3. Android SDK'nın konumunu ayarlayın:
     sdk.dir=path/to/android/sdk
    
    .
  4. Firebase'i ayarlamak için google-services.json dosyasını kopyalayıp packages/apps/Car/DebuggingRestrictionController/app. Gradle, dosyayı ayrıştırır ve gerisini otomatik olarak ayarlar.
  5. Ortam değişkenlerini tanımlayın. Paketlenmiş derlemelerde olduğu gibi:
    • $TOKEN_USES_SELF_SIGNED_CA: doğru veya yanlış;
    • $ROOT_CA_CERT: PEM kodlu kök CA sertifikasının yolu;
    • $TOKEN_ISSUER_API_NAME: Firebase Cloud işlevinin adı;
    • $TOKEN_ISSUER_HOST_NAME: Sertifikadaki SAN;
    • $DRC_TEST_EMAIL ve $DRC_TEST_EMAIL: Test için kimlik bilgileri yalnızca hata ayıklama derlemelerinde kullanılabilir.
  6. Uygulamayı Gradle ile derlemek için aşağıdaki gibi bir komut çalıştırın:
    $ ./gradlew build
    
    .

Jetonu veren kuruluşu entegre edin

Referans jetonunu veren, Node.js bölgesinde uygulanmış bir Firebase Cloud Functions işlevidir. İşlev yalnızca kimliği doğrulanmış bir kullanıcı tarafından çağrılabilir. Uygulamayı dağıtmadan önce şunları ayarlamanız gerekir: JWS jetonlarını imzalamak için kullanılan özel anahtarı ve sertifikaları kaydetmelisiniz.

  1. Bir JSON dosyasını aşağıdaki içeriklerle doldurun:
    {
        "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"
    }
    
    .

    Sertifikalar önce son varlık sertifikası ve kök CA sertifikasıyla sıralanır tercih edebilirsiniz. Süre son tarihi özelleştirilebilir ve geçerliyse daha uzun bir süreye ayarlanabilir. jetonun alınıp bir DRC uygulaması tarafından kullanılması biraz zaman alır. Jeton iptali desteklenmez.

  2. Yapılandırmayı Firebase'e yükleyin:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. Firebase Cloud işlevini dağıtın:
  5. $ firebase deploy --only functions
    
  6. Jeton vereninizi yönetmek ve izlemek için şuraya bakın: Yönet işlevleri için dağıtım ve çalışma zamanı seçeneklerini inceleyin.

Varsayılan kısıtlamaları ayarlama

Varsayılan kısıtlamalar ilk başlatmadan önce uygulanabilir. Bunu statik kaynakla yapma yer paylaşımlarını kullanabilirsiniz. Kısıtlamalar sırasıyla farklı kullanıcı türlerine uygulanır. Farklı kullanıcı türleri hakkında bilgi edinmek için Çok Kullanıcılı Destek.

Gözetimsiz sistem kullanıcısı için varsayılan kısıtlama config_defaultFirstUserRestrictions dize dizisi frameworks/base/core/res/res/values/config.xml. Bu kısıtlamayı ayarlama Android Debug Bridge'i (ADB), kısıtlama kaldırılana kadar otomatik olarak devre dışı bırakır. örnek:

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

Normal kullanıcılar (örneğin, sürücüler ve yolcular) için varsayılan kısıtlamalar, ve misafirler, frameworks/base/core/res/res/xml/config_user_types.xml. Bunları üst üste bindirerek dizeleri kullanarak sırasıyla her kullanıcı türünde varsayılan kısıtlamaları ayarlayabilirsiniz. Örneğin:

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