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

AAOS Hata Ayıklama Kısıtlama Denetleyicisini (DRC) entegre etmek için bu sayfadaki talimatları kullanın.

Şekil 1. DRC uygulaması örneği.

Mimari

DRC mimarisi Şekil 2'de gösterilmektedir. Kırmızıyla özetlenen bileşenler (token veren kuruluş ve DRC), özelleştirebileceğiniz referans uygulamalara eşlik eder.

Şekil 2. DRC mimarisi.

DRC nedir?

Araç ana ünitesi DRC uygulamasını içerir ( packages/apps/Car/DebuggingRestrictionController içindeki referans uygulamaya bakın). Referans uygulaması, belirteci veren kuruluştan erişim belirteci alma, belirteci doğrulama ve ardından belirteçte belirtildiği şekilde hata ayıklama kısıtlaması değişikliklerini uygulama mantığını içerir. Mantık, araç tarafındaki temel UX öğelerini içerir.

Token veren kuruluş nedir?

Bu, kriptografik olarak imzalanmış erişim belirteçleri yayınlayan bir web hizmetidir ( packages/apps/Car/DebuggingRestrictionController/server içindeki referans uygulamasına bakın). Referans web hizmeti, dağıtılabilir bir Firebase Bulut işlevidir (daha fazla bilgi edinmek için bkz . Firebase için Bulut İşlevleri ).

Önkoşullar

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

Erişim belirteçlerini imzalamak için sertifikaları hazırlayın

Belirteç veren kuruluş, erişim belirteçleri olarak JSON Web İmzalarını (JWS) oluşturur. Optimum uyumluluk için referans veren kuruluş yalnızca RS256 algoritmasını (SHA256'lı RSA imzaları) destekler. Anahtar rotasyonunu kolaylaştırmak amacıyla erişim belirteçlerini imzalamak için tek bir sertifika yerine bir sertifika zinciri kullanın. Tipik bir sertifika zinciri, bir kök CA sertifikası, bir ara CA sertifikası ve bir son varlık sertifikasından oluşmalıdır.

JWS belirteçlerini imzalayan son varlık sertifikası, standart TLS sertifikasından farklı değildir. DigiCert gibi genel CA'lardan bir sertifika satın alabilir veya kendinden imzalı kök CA sertifikalarını veya Donanım Güvenliği Modüllerini kullanarak kendi sertifika zincirinizi koruyabilirsiniz. Son varlık sertifikası, Konu Alternatif Adı (SAN) uzantısına sahip bir X509v3 sertifikası olmalıdır. SAN uzantısı, belirteci verenin bir tanımlayıcısını (örneğin ana bilgisayar adı) içerir. Son olarak, belirteç veren kuruluş yalnızca RS256'yı desteklediğinden, EC sertifikalarına göre RSA sertifikaları tercih edilmelidir.

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

Firebase'i kurun

Referans jetonu veren kuruluş, Firebase Authentication ve Firebase Cloud Function'ı kullanır.

Firebase hesabınızı kurmak için:

  1. Firebase projesi oluşturmak için Firebase'i Android projenize ekleme konusuna bakın.
  2. Bazı Firebase kimlik doğrulayıcılarını etkinleştirmek için bkz. Firebase Kimlik Doğrulamasına nereden başlayabilirim? .
  3. Boş bir Firebase Cloud işlevi eklemek için bkz . Başlarken .
  4. Henüz yapmadıysanız, belirteç vereni derleyip dağıtmak için Node.js , NPM ve Firebase araçlarını yükleyin.

DRC uygulamasını entegre edin

Referans DRC uygulaması packages/apps/Car/DebuggingRestrictionController konumunda bulunur. Uygulama, Soong ile AOSP'de paket halinde oluşturulabilir veya Gradle ile paketten çıkarılabilir .

Paketlenmiş yapı

Paketlenmiş bir uygulama oluşturmak için:

  1. applicationId , projectId ve apiKey google-services.json packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java içine kopyalayın. Bunu yapmak DRC uygulamasının Firebase'e doğru şekilde bağlanmasını sağlar.
  2. Bu sabitleri packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java dosyasında güncelleyin:
    • TOKEN_USES_SELF_SIGNED_CA , kendinden imzalı kök CA sertifikalarının kullanılıp kullanılmadığını gösterir. Etkinleştirilirse DRC uygulaması yalnızca ROOT_CA_CERT belirtilen PEM kodlu kök CA sertifikasına güvenir.
    • TOKEN_ISSUER_API_NAME , Firebase Bulut işlevinin adıdır ve daha önce Firebase Konsolunda oluşturduğunuz Bulut işleviyle eşleşmelidir.
    • TOKEN_ISSUER_HOSTNAME erişim belirteçlerini imzalayacak son varlık sertifikasındaki Konu Alternatif Adıyla eşleşmelidir.
    • DRC_TEST_EMAIL ve DRC_TEST_PASSWORD , E-posta/Şifre ile oturum açmayı etkinleştirdiyseniz Firebase'de önceden hazırlanabilen isteğe bağlı bir test hesabının kimlik bilgileridir. Bunlar yalnızca aletli 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ı izin izin verilenler listesine eklemeyi ayarlamanız gerekir. İzin verilenler listesi en az android.permission.MANAGE_USERS içermelidir. Örneğin:

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

Paketlenmemiş yapı

Paketlenmemiş DRC yapıları, uygulamayı derlemek için Gradle'ı kullanır.

Paketlenmemiş bir yapı oluşturmak için:

  1. Android SDK'yı yüklediğinizi doğrulayı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 kurmak için google-services.json dosyasını packages/apps/Car/DebuggingRestrictionController/app dosyasına kopyalayın. Gradle dosyayı ayrıştırır ve geri kalanını otomatik olarak ayarlar.
  5. Ortam değişkenlerini tanımlayın. Paketlenmiş yapılarda olduğu gibi şunları belirtmeniz gerekir:
    • $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 Bulut işlevinin adı;
    • $TOKEN_ISSUER_HOST_NAME : Sertifikadaki SAN;
    • $DRC_TEST_EMAIL ve $DRC_TEST_EMAI L: test hesabı için kimlik bilgileri, yalnızca hata ayıklama derlemeleri.
  6. Uygulamayı Gradle ile oluşturmak için şuna benzer bir komut çalıştırın:
    $ ./gradlew build
    

Token veren kuruluşu entegre edin

Referans belirteci veren kuruluş, Node.js uygulanan bir Firebase Bulut İşlevidir. İşlev yalnızca kimliği doğrulanmış bir kullanıcı tarafından çağrılabilir. Uygulamayı dağıtmadan önce JWS belirteçlerini imzalamak için kullanılan özel anahtarı ve sertifikaları ayarlamanız gerekir.

  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 sonda kök CA sertifikası olacak şekilde sıralanır. Sona erme süresi özelleştirilebilir ve verilen bir tokenın DRC uygulaması tarafından alınıp tüketilmesi biraz zaman alırsa daha uzun bir süreye ayarlanabilir. Jeton iptali desteklenmiyor.

  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. Belirteç veren kuruluşunuzu yönetmek ve izlemek için bkz . İşlev dağıtımını ve çalışma zamanı seçeneklerini yönetme .

Varsayılan kısıtlamaları ayarlayın

İlk önyüklemeden önce varsayılan kısıtlamalar uygulanabilir. Android çerçevesindeki varsayılanları geçersiz kılmak için bunu statik kaynak katmanlarıyla yapın. Kısıtlamalar sırasıyla farklı kullanıcı türlerine uygulanabilir. Farklı kullanıcı türleri hakkında bilgi edinmek için Çoklu Kullanıcı Desteği'ne bakın.

Başsız sistem kullanıcısı için varsayılan kısıtlama frameworks/base/core/res/res/values/config.xml dosyasındaki config_defaultFirstUserRestrictions dize dizisiyle yapılandırılabilir. Bu kısıtlamanın ayarlanması, kısıtlama kaldırılana kadar Android Hata Ayıklama Köprüsü'nü (ADB) otomatik olarak devre dışı bırakır; örneğin:

<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) ve konuklar için varsayılan kısıtlamalar, frameworks/base/core/res/res/xml/config_user_types.xml dosyasında yapılandırılabilir. Her bir kullanıcı türüne ilişkin varsayılan kısıtlamaları sırasıyla ayarlamak için bu dizeleri üst üste yerleştirebilirsiniz, ö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>