Debugging Restriction Controller Integration Guide

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Verwenden Sie die folgenden Anweisungen, um den AAOS Debugging Restriction Controller (DRC) zu integrieren.

Abbildung 1. Beispiel einer DRC-App

Die Architektur

Die DRC-Architektur ist unten dargestellt. Die rot umrandeten Komponenten (Token Issuer und Debutting Restriction Controller) haben begleitende Referenzimplementierungen, die Sie anpassen können.

Abbildung 2. DRC-Architektur

Was ist die Demokratische Republik Kongo?

Die Autohaupteinheit enthält die DRC-App (siehe Referenzimplementierung in packages/apps/Car/DebuggingRestrictionController ). Die Referenz-App enthält die Logik zum Empfangen eines Zugriffstokens vom Tokenaussteller, zum Validieren des Tokens und zum anschließenden Anwenden von Änderungen der Debugging-Einschränkung, wie im Token angegeben. Die Logik umfasst grundlegende UX-Elemente auf der Fahrzeugseite.

Was ist der Token-Aussteller?

Dies ist ein Webdienst, der kryptografisch signierte Zugriffstoken ausgibt (siehe Referenzimplementierung in packages/apps/Car/DebuggingRestrictionController/server ). Der Referenzwebdienst ist eine bereitstellbare Firebase Cloud-Funktion (weitere Informationen finden Sie unter Cloud-Funktionen für Firebase ).

Voraussetzungen

Stellen Sie vor dem Bereitstellen einer Referenzimplementierung sicher, dass Sie die folgenden Aufgaben ausführen.

Vorbereiten von Zertifikaten zum Signieren von Zugriffstoken

Der Token-Aussteller generiert JSON-Websignaturen (JWS) als Zugriffstoken. Für eine optimale Kompatibilität unterstützt der Referenzaussteller nur den RS256-Algorithmus (RSA-Signaturen mit SHA256). Um die Schlüsselrotation zu erleichtern, verwenden Sie eine Zertifikatskette anstelle eines einzelnen Zertifikats, um Zugriffstoken zu signieren. Eine typische Zertifikatskette sollte aus einem CA-Stammzertifikat, einem CA-Zwischenzertifikat und einem Zertifikat der Endeinheit bestehen.

Das Zertifikat der Endeinheit, das die JWS-Token signiert, unterscheidet sich nicht von einem standardmäßigen TLS-Zertifikat. Sie können entweder ein Zertifikat von öffentlichen CAs wie DigiCert erwerben oder Ihre eigene Zertifikatskette mit selbstsignierten Root-CA-Zertifikaten oder Hardware-Sicherheitsmodulen pflegen. Das Endentitätszertifikat sollte ein X509v3-Zertifikat mit einer SAN-Erweiterung (Subject Alternative Name) sein. Die SAN-Erweiterung enthält eine Kennung (z. B. Hostname) des Token-Ausstellers. Schließlich sollten RSA-Zertifikate gegenüber EC-Zertifikaten bevorzugt werden, da der Token-Aussteller nur RS256 unterstützt.

Google stellt ein Shell-Skript zum Generieren selbstsignierter Zertifikate in packages/apps/Car/DebuggingRestrictionController/server/genkey.sh .

Firebase einrichten

Der Referenz-Token-Aussteller verwendet die Firebase-Authentifizierung und die Firebase-Cloud-Funktion .

So richten Sie Ihr Firebase-Konto ein:

  1. Informationen zum Erstellen eines Firebase-Projekts finden Sie unter Hinzufügen von Firebase zu Ihrem Android-Projekt .
  2. Informationen zum Aktivieren einiger Firebase-Authentifikatoren finden Sie unter Wo fange ich mit der Firebase-Authentifizierung an? .
  3. Informationen zum Hinzufügen einer leeren Firebase Cloud-Funktion finden Sie unter Erste Schritte .
  4. Falls noch nicht geschehen, installieren Sie Node.js, NPM und Firebase Tools, um den Token Issuer zu kompilieren und bereitzustellen.

Integration der DRC-App

Die Referenz-DRC-App befindet sich in packages/apps/Car/DebuggingRestrictionController . Die App kann gebündelt in AOSP mit Soong oder ungebündelt mit Gradle erstellt werden.

Gebündelter Aufbau

So erstellen Sie eine gebündelte App:

  1. Kopieren Sie applicationId , projectId und apiKey aus google-services.json in packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java . Dadurch kann die DRC-App korrekt eine Verbindung zu Firebase herstellen.
  2. Aktualisieren Sie diese Konstanten in packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java :
    • TOKEN_USES_SELF_SIGNED_CA gibt an, ob selbstsignierte Root-CA-Zertifikate verwendet werden. Wenn diese Option aktiviert ist, vertraut die DRC-App nur dem PEM-codierten CA-Stammzertifikat, das in ROOT_CA_CERT angegeben ist.
    • TOKEN_ISSUER_API_NAME ist der Name der Firebase Cloud-Funktion und sollte mit der Cloud-Funktion übereinstimmen, die Sie zuvor in der Firebase Console erstellt haben.
    • TOKEN_ISSUER_HOSTNAME sollte mit dem alternativen Antragstellernamen im Zertifikat der Endeinheit übereinstimmen, das die Zugriffstoken signiert.
    • DRC_TEST_EMAIL und DRC_TEST_PASSWORD sind Anmeldedaten für ein optionales Testkonto, das in Firebase vorab bereitgestellt werden kann, wenn Sie die Anmeldung per E-Mail/Passwort aktiviert haben. Diese werden nur für instrumentierte Tests verwendet.

Die App ist jetzt so konfiguriert, dass sie Ihr Firebase-Konto und Ihre Zertifikate verwendet. In Android 9 und höher müssen Sie Privileged Permission Allowlisting einrichten . Die Zulassungsliste muss mindestens android.permission.MANAGE_USERS enthalten. Zum Beispiel:

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

Ungebündelter Aufbau

Ungebündelte DRC-Builds verwenden Gradle zum Kompilieren der App.

So erstellen Sie einen entbündelten Build:

  1. Bestätigen Sie, dass Sie das Android SDK installiert haben.
  2. Erstellen Sie im Stammverzeichnis der App eine Textdatei mit dem Namen local.properties .
  3. Legen Sie den Speicherort des Android SDK fest:
     sdk.dir=path/to/android/sdk
    
  4. Kopieren Sie zum Einrichten von Firebase google-services.json nach packages/apps/Car/DebuggingRestrictionController/app . Gradle analysiert die Datei und richtet den Rest automatisch ein.
  5. Definieren Sie die Umgebungsvariablen. Wie bei gebündelten Builds müssen Sie Folgendes angeben:
    • $TOKEN_USES_SELF_SIGNED_CA : wahr oder falsch;
    • $ROOT_CA_CERT : Pfad zum PEM-codierten Root-CA-Zertifikat;
    • $TOKEN_ISSUER_API_NAME : Name der Firebase Cloud-Funktion;
    • $TOKEN_ISSUER_HOST_NAME : SAN im Zertifikat;
    • $DRC_TEST_EMAIL und $DRC_TEST_EMAI : Anmeldeinformationen für ein Testkonto, nur Debug-Builds.
  6. Um die App mit Gradle zu erstellen, führen Sie einen Befehl wie diesen aus:
    $ ./gradlew build
    

Integration des Token-Ausstellers

Der Referenz-Token-Aussteller ist eine in Node.js implementierte Firebase-Cloud-Funktion. Die Funktion kann nur von einem authentifizierten Benutzer aufgerufen werden. Vor der Bereitstellung der App müssen Sie den privaten Schlüssel und die Zertifikate einrichten, die zum Signieren der JWS-Token verwendet werden.

  1. Füllen Sie eine JSON-Datei mit folgendem Inhalt:
    {
        "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"
    }
    

    Zertifikate werden mit dem Endteilnehmerzertifikat zuerst und dem Root-CA-Zertifikat am Ende bestellt. Der Ablaufzeitraum ist anpassbar und kann auf eine längere Dauer eingestellt werden, wenn ein ausgestelltes Token einige Zeit braucht, bevor es von einer DRC-App empfangen und verwendet werden kann. Token-Widerruf wird nicht unterstützt.

  2. Laden Sie die Konfiguration in Firebase hoch:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. Stellen Sie die Firebase Cloud-Funktion bereit:
  5. $ firebase deploy --only functions
    
  6. Informationen zum Verwalten und Überwachen Ihres Token-Ausstellers finden Sie unter Verwalten von Funktionen, Bereitstellung und Laufzeitoptionen .

Festlegen von Standardeinschränkungen

Vor dem ersten Start können Standardeinschränkungen angewendet werden. Tun Sie dies mit statischen Ressourcenüberlagerungen, um die Standardeinstellungen im Android-Framework zu überschreiben. Einschränkungen können jeweils auf verschiedene Arten von Benutzern angewendet werden. Informationen zu verschiedenen Benutzertypen finden Sie unter Mehrbenutzerunterstützung .

Die Standardeinschränkung für den Headless-Systembenutzer kann mit dem String-Array config_defaultFirstUserRestrictions in frameworks/base/core/res/res/values/config.xml . Wenn Sie diese Einschränkung festlegen, wird Android Debug Bridge (ADB) automatisch deaktiviert, bis die Einschränkung entfernt wird, zum Beispiel:

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

Die Standardeinschränkungen für normale Benutzer (z. B. Fahrer und Beifahrer) und Gäste können in frameworks/base/core/res/res/xml/config_user_types.xml . Sie können diese Zeichenfolgen überlagern, um die Standardeinschränkungen für jeden Benutzertyp festzulegen, zum Beispiel:

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