Przewodnik po integracji kontrolera ograniczeń debugowania

Skorzystaj z instrukcji na tej stronie, aby zintegrować kontroler ograniczeń debugowania AAOS (Demokratyczna Republika Konga).

Rysunek 1. Przykład aplikacji DRC.

Architektura

Architektura DRK przedstawiliśmy na rys. 2. Komponenty zaznaczone na czerwono (wydawca tokena i DRC) mają towarzyszące mu implementacje referencyjne, które możesz dostosować.

Rysunek 2. na architekturze Demokratycznej Republiki Ludowej.

Co to jest Demokratyczna Republika Konga?

Jednostka centralna samochodu zawiera aplikację DRC (zobacz implementację referencyjne w packages/apps/Car/DebuggingRestrictionController). Aplikacja referencyjna zawiera logikę odbierania tokena dostępu od jego wydawcy, weryfikacji tokena oraz a następnie zastosuj zmiany ograniczeń debugowania zgodnie z danymi w tokenie. Ta logika obejmuje podstawowych elementów UX po stronie samochodu.

Jaki jest wydawca tokena?

To usługa sieciowa, która generuje kryptograficznie podpisane tokeny dostępu (patrz implementacja w środowisku packages/apps/Car/DebuggingRestrictionController/server. Referencyjna usługa internetowa to wdrażana funkcja Firebase w Cloud Functions (aby dowiedzieć się więcej, zapoznaj się z Cloud Functions dla Firebase).

Wymagania wstępne

Przed wdrożeniem implementacji referencyjnej wykonaj te czynności.

Przygotowywanie certyfikatów do podpisywania tokenów dostępu

Wydawca tokena generuje jako tokeny dostępu podpisy internetowe JSON (JWS). Optymalny zgodność, wydawca referencyjny obsługuje tylko algorytm RS256 (podpisy RSA z SHA256). Aby ułatwić rotację kluczy, do podpisywania użyj łańcucha certyfikatów zamiast jednego certyfikatu tokeny dostępu. Typowy łańcuch certyfikatów powinien składać się z głównego certyfikatu CA, pośredniego certyfikatu CA i certyfikatu jednostki końcowej.

Certyfikat jednostki końcowej podpisujący tokeny JWS nie różni się od standardowego protokołu TLS. certyfikat. Możesz kupić certyfikat od publicznych urzędów certyfikacji, takich jak DigiCert, własny łańcuch certyfikatów korzystający z podpisanych samodzielnie certyfikatów głównych CA lub sprzętowych modułów zabezpieczeń. Certyfikat jednostki końcowej powinien być certyfikatem X509v3 z alternatywną nazwą podmiotu (SAN). Rozszerzenie SAN zawiera identyfikator (np. nazwę hosta) tokena. wystawcy. Certyfikaty RSA powinny być preferowane zamiast certyfikatów EC, ponieważ token wydawca obsługuje tylko protokół RS256.

Google udostępnia skrypt powłoki do generowania samodzielnie podpisanych certyfikatów packages/apps/Car/DebuggingRestrictionController/server/genkey.sh

Skonfiguruj Firebase

Wydawca tokena referencyjnego używa Uwierzytelnianie Firebase oraz funkcji Firebase w Cloud Functions.

Aby skonfigurować konto Firebase:

  1. Aby utworzyć projekt Firebase, zobacz Dodaj Firebase do swojego projektu na Androida.
  2. Aby włączyć niektóre moduły uwierzytelniające Firebase, zobacz Gdzie mogę zacząć od Uwierzytelniania Firebase?
  3. Aby dodać pustą funkcję Firebase w Cloud Functions, zobacz Pobierz Rozpoczęto.
  4. Jeśli jeszcze tego nie zrobiłeś, zainstaluj narzędzia Node.js, NPM i Firebase, aby skompilować i wdrożyć wydawcę tokena.

Integracja z aplikacją DRC

Aplikacja DRC znajduje się w: packages/apps/Car/DebuggingRestrictionController Aplikację można skompilować w pakiecie w AOSP z Soong lub niegrupowane z Gradle.

Kompilacja w pakiecie

Aby utworzyć aplikację w pakiecie:

  1. Skopiuj applicationId, projectId i apiKey z języka: google-services.json na język packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java. Dzięki temu aplikacja DRC będzie mogła prawidłowo łączyć się z Firebase.
  2. Zaktualizuj te stałe w: packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java:
    • TOKEN_USES_SELF_SIGNED_CA wskazuje, czy podpisane samodzielnie certyfikaty główne CA są . Jeśli ta opcja jest włączona, aplikacja DRC ufa tylko certyfikatowi głównego urzędu certyfikacji zakodowanego w formacie PEM określonym w ROOT_CA_CERT
    • TOKEN_ISSUER_API_NAME to nazwa funkcji Firebase w Cloud Functions i powinna pasują do funkcji w Cloud utworzonej wcześniej w konsoli Firebase.
    • Wartość TOKEN_ISSUER_HOSTNAME powinna być zgodna z alternatywną nazwą podmiotu w parametrze certyfikatu jednostki końcowej, który będzie podpisywać tokeny dostępu.
    • DRC_TEST_EMAIL i DRC_TEST_PASSWORD to dane logowania dla opcjonalne konto testowe, które można przygotować wstępnie do obsługi administracyjnej w Firebase, jeśli masz włączone Logowanie za pomocą adresu e-mail/hasła. Służą one tylko do testów instrumentowanych.

Aplikacja jest teraz skonfigurowana i może korzystać z konta Firebase i certyfikatów. Na Androidzie 9 i nowszych musisz skonfigurować dodanie do listy dozwolonych uprawnień z podwyższonymi uprawnieniami. Lista dozwolonych musi zawierać co najmniej android.permission.MANAGE_USERS. Na przykład:

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

Niegrupowana kompilacja

Niepołączone kompilacje DRC wykorzystują Gradle do kompilowania aplikacji.

Aby utworzyć niepogrupowaną kompilację:

  1. Sprawdź, czy masz zainstalowany pakiet Android SDK.
  2. Utwórz plik tekstowy o nazwie local.properties w katalogu głównym aplikacji.
  3. Ustaw lokalizację pakietu Android SDK:
     sdk.dir=path/to/android/sdk
    
  4. Aby skonfigurować Firebase, skopiuj google-services.json do packages/apps/Car/DebuggingRestrictionController/app Gradle analizuje plik i automatycznie skonfiguruje resztę.
  5. Zdefiniuj zmienne środowiskowe. Tak jak w przypadku pakietów kompilacji, musisz określić:
    • $TOKEN_USES_SELF_SIGNED_CA: true lub false;
    • $ROOT_CA_CERT: ścieżka do głównego certyfikatu CA zakodowanego w formacie PEM;
    • $TOKEN_ISSUER_API_NAME: nazwa funkcji Firebase w Cloud Functions;
    • $TOKEN_ISSUER_HOST_NAME: numer SAN w certyfikacie;
    • $DRC_TEST_EMAIL i $DRC_TEST_EMAIL: dane uwierzytelniające na potrzeby testu tylko do debugowania.
  6. Aby utworzyć aplikację przy użyciu Gradle, uruchom takie polecenie:
    $ ./gradlew build
    

Zintegruj wydawcę tokena

Wydawca tokena referencyjnego to funkcja Firebase w Cloud Functions zaimplementowana w Node.js. Tę funkcję może wywołać tylko uwierzytelniony użytkownik. Przed wdrożeniem aplikacji ustaw klucz prywatny i certyfikaty używane do podpisywania tokenów JWS.

  1. Wypełnij plik JSON następującą treścią:
    {
        "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"
    }
    

    Certyfikaty są porządkowane najpierw na podstawie certyfikatu jednostki końcowej i certyfikatu głównego urzędu certyfikacji na końcu. Okres ważności można dostosować i ustawić dłuższy, jeśli Wydany token może zostać odebrany i wykorzystany przez aplikację DRC dopiero po pewnym czasie. Token nie jest obsługiwane.

  2. Prześlij konfigurację do Firebase:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. Wdróż funkcję Firebase w Cloud:
  5. $ firebase deploy --only functions
    
  6. Aby zarządzać wydawcą tokena i go monitorować, zobacz Zarządzaj opcje wdrażania funkcji i środowiska wykonawczego.

Ustaw ograniczenia domyślne

Domyślne ograniczenia można zastosować przed pierwszym uruchomieniem. Zrób to z zasobem statycznym i zastępują wartości domyślne w platformie Androida. Ograniczenia mogą być w odniesieniu do różnych typów użytkowników. Aby dowiedzieć się więcej o różnych typach użytkowników, zobacz Obsługa wielu użytkowników.

Domyślne ograniczenie dla użytkownika systemu bez interfejsu graficznego można skonfigurować za pomocą: tablica ciągów znaków config_defaultFirstUserRestrictions w frameworks/base/core/res/res/values/config.xml Ustawienie tego ograniczenia automatycznie wyłącza Android Debug Bridge (ADB) do czasu usunięcia ograniczenia w przypadku: przykład:

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

domyślne ograniczenia dla zwykłych użytkowników (na przykład kierowców i pasażerów), i gości można skonfigurować w frameworks/base/core/res/res/xml/config_user_types.xml Możesz nałożyć na nie elementy ciągi tekstowe, aby ustawić domyślne ograniczenia odpowiednio dla każdego typu użytkownika, na przykład:

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