Integrationsleitfaden für den Einschränkungs-Controller zur Fehlerbehebung

Folgen Sie der Anleitung auf dieser Seite, um den AAOS Debugging Restriction Controller zu integrieren Demokratische Republik Kongo.

Abbildung 1: Beispiel für eine DRC-Anwendung

Architektur

Die Architektur der Demokratischen Republik Kongo ist in Abbildung 2 dargestellt. Rot umrandete Komponenten (Tokenaussteller und DRC) zugehörige Referenzimplementierungen, die Sie anpassen können.

Abbildung 2: Architektur des DRC.

Was ist die Demokratische Republik Kongo?

Das Infotainmentsystem des Autos enthält die DRC App (siehe Referenzimplementierung in packages/apps/Car/DebuggingRestrictionController. Die Referenz-App enthält die Logik für den Empfang eines Zugriffstokens vom Tokenaussteller, das Validieren des Tokens und und anschließend die im Token angegebenen Einschränkungen zur Fehlerbehebung anwenden. Die Logik enthält grundlegende UX-Elemente auf der Autoseite.

Was ist der Tokenaussteller?

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

Voraussetzungen

Bevor Sie eine Referenzimplementierung bereitstellen, müssen Sie die folgenden Aufgaben ausführen.

Zertifikate zum Signieren von Zugriffstokens vorbereiten

Der Tokenaussteller generiert JSON-Websignaturen (JWS) als Zugriffstoken. Für optimale Kompatibilität, unterstützt der Referenzaussteller nur den RSA-Algorithmus (RSA-Signaturen mit SHA256). Verwenden Sie zum Signieren eine Zertifikatskette anstelle eines einzelnen Zertifikats, um die Schlüsselrotation zu erleichtern Zugriffstokens. Eine typische Zertifikatskette besteht aus einem Zertifikat einer Stammzertifizierungsstelle, einem ein Zwischen-CA-Zertifikat und ein Endentitätszertifikat.

Das Zertifikat der Endentität zum Signieren der JWS-Tokens unterscheidet sich nicht von einem Standard-TLS-Zertifikat. Zertifikat. Sie können entweder ein Zertifikat von öffentlichen Zertifizierungsstellen wie DigiCert erwerben Ihre eigene Zertifikatskette mithilfe selbst signierter Root-CA-Zertifikate oder Hardware-Sicherheitsmodulen erstellen. Das Zertifikat der Endentität sollte ein X509v3-Zertifikat mit einem alternativen Antragstellernamen sein SAN-Erweiterung. Die SAN-Erweiterung enthält eine Kennung (z. B. den Hostnamen) des Tokens. Aussteller. RSA-Zertifikate sollten gegenüber EC-Zertifikaten bevorzugt werden, da das Token Der Aussteller unterstützt nur RS256.

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

Firebase einrichten

Der Aussteller des Referenztokens verwendet Firebase Authentication und Firebase Cloud Functions-Funktion

So richten Sie Ihr Firebase-Konto ein:

  1. Informationen zum Erstellen eines Firebase-Projekts finden Sie unter Firebase hinzufügen zu Ihr Android-Projekt.
  2. Informationen zum Aktivieren einiger Firebase-Authenticatoren finden Sie unter Wo kann ich mit Firebase Authentication beginnen?
  3. Informationen zum Hinzufügen einer leeren Firebase Cloud-Funktion finden Sie unter Holen Sie sich Gestartet.
  4. Falls noch nicht geschehen, installieren Sie die Node.js-, NPM- und Firebase-Tools, um zu kompilieren und Stellen Sie den Tokenaussteller bereit. <ph type="x-smartling-placeholder">

DRC-Anwendung einbinden

Die Referenz-App für die DRC befindet sich in packages/apps/Car/DebuggingRestrictionController Die App kann gebündelt in AOSP mit Soong oder mit Gradle entbündelt wurde.

Gebündelter Build

So erstellen Sie eine gebündelte Anwendung:

  1. applicationId, projectId und apiKey kopieren von google-services.json nach packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java Dadurch kann die DRC-App eine korrekte Verbindung zu Firebase herstellen.
  2. Aktualisieren Sie diese Konstanten in packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java: <ph type="x-smartling-placeholder">
      </ph>
    • TOKEN_USES_SELF_SIGNED_CA gibt an, ob selbstsignierte Root-CA-Zertifikate verwendet. Wenn diese Option aktiviert ist, vertraut die DRC-App nur dem PEM-codierten Root-CA-Zertifikat, das im ROOT_CA_CERT
    • TOKEN_ISSUER_API_NAME ist der Name der Firebase Cloud Functions-Funktion und sollte mit der Cloud Functions-Funktion übereinstimmen, die Sie zuvor in der Firebase Console erstellt haben.
    • TOKEN_ISSUER_HOSTNAME sollte mit dem alternativen Antragstellernamen in der Endentitätszertifikat, mit dem die Zugriffstokens signiert werden.
    • DRC_TEST_EMAIL und DRC_TEST_PASSWORD sind Anmeldedaten für ein optionales Testkonto, das in Firebase vorab bereitgestellt werden kann, falls Sie Anmeldung mit E-Mail-Adresse und Passwort. Sie werden nur für instrumentierte Tests verwendet.

Die App ist jetzt für die Verwendung Ihres Firebase-Kontos und Ihrer Zertifikate konfiguriert. Unter Android 9 und höher müssen Sie Zulassungsliste für privilegierte Berechtigungen Die Zulassungsliste muss mindestens android.permission.MANAGE_USERS enthalten. Beispiel:

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

Nicht gebündelter Build

Nicht gebündelte DRC-Builds verwenden Gradle, um die App zu kompilieren.

So erstellen Sie einen entbündelten Build:

  1. Prüfen Sie, ob Sie das Android SDK installiert haben.
  2. Erstellen Sie im Stammverzeichnis der Anwendung eine Textdatei mit dem Namen local.properties.
  3. Legen Sie den Speicherort des Android SDK fest:
     sdk.dir=path/to/android/sdk
    
  4. Wenn Sie Firebase einrichten möchten, kopieren Sie google-services.json nach packages/apps/Car/DebuggingRestrictionController/app. Gradle parst die Datei. und der Rest werden automatisch eingerichtet.
  5. Definieren Sie die Umgebungsvariablen. Wie bei gebündelten Builds müssen Sie Folgendes angeben: <ph type="x-smartling-placeholder">
      </ph>
    • $TOKEN_USES_SELF_SIGNED_CA: true oder false;
    • $ROOT_CA_CERT: Pfad zum PEM-codierten Stammzertifikat der Zertifizierungsstelle
    • $TOKEN_ISSUER_API_NAME: Name der Firebase Cloud Functions-Funktion
    • $TOKEN_ISSUER_HOST_NAME: SAN im Zertifikat.
    • $DRC_TEST_EMAIL und $DRC_TEST_EMAIL: Anmeldedaten für einen Test -Konto, nur Debug-Builds.
  6. Führen Sie einen Befehl wie den folgenden aus, um die App mit Gradle zu erstellen:
    $ ./gradlew build
    
    <ph type="x-smartling-placeholder">

Tokenaussteller einbinden

Der Aussteller des Referenztokens ist eine Firebase Cloud Functions-Funktion, die in Node.js implementiert ist. Die Funktion kann nur von einem authentifizierten Nutzer aufgerufen werden. Vor dem Bereitstellen der Anwendung müssen Sie Folgendes festlegen: privaten Schlüssel und Zertifikate zum Signieren der JWS-Tokens abrufen

  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 so geordnet, dass zuerst das Zertifikat der Endentität und das Zertifikat der Stammzertifizierungsstelle angezeigt werden am Ende. Die Ablauffrist ist anpassbar und kann auf eine längere Dauer festgelegt werden, wenn ein Es dauert einige Zeit, bis das ausgestellte Token von einer DRC-Anwendung empfangen und genutzt 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 des Tokenausstellers finden Sie unter Verwalten Optionen für Bereitstellung und Laufzeit von Funktionen.

Standardeinschränkungen festlegen

Standardeinschränkungen können vor dem ersten Start angewendet werden. Mit einer statischen Ressource ausführen Overlays, um die Standardeinstellungen im Android-Framework zu überschreiben. Einschränkungen können jeweils auf verschiedene Arten von Nutzern angewendet. Weitere Informationen zu den verschiedenen Nutzertypen finden Sie unter Unterstützung mehrerer Nutzer.

Die Standardeinschränkung für monitorlose Systemnutzer kann konfiguriert werden mit das String-Array config_defaultFirstUserRestrictions in frameworks/base/core/res/res/values/config.xml. Diese Einschränkung festlegen deaktiviert Android Debug Bridge (ADB) automatisch, bis die Einschränkung aufgehoben wird. Beispiel:

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

Die Standardeinschränkungen für reguläre Nutzer (z. B. Fahrer und Beifahrer) und Gäste können hier konfiguriert werden: frameworks/base/core/res/res/xml/config_user_types.xml Sie können diese übereinanderlegen, Strings zum Festlegen der Standardeinschränkungen für jeden Nutzertyp. 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>
<ph type="x-smartling-placeholder">