Befolgen Sie die Anweisungen auf dieser Seite, um den AAOS Debugging Restriction Controller (DRC) zu integrieren.
Abbildung 1. Beispiel einer DRC-App.
Die Architektur
Die DRC-Architektur ist in Abbildung 2 dargestellt. Die rot umrandeten Komponenten (Token-Aussteller und DRC) verfügen über begleitende Referenzimplementierungen, die Sie anpassen können.
Abbildung 2. DRC-Architektur.
Was ist die Demokratische Republik Kongo?
Die Auto-Haupteinheit enthält die DRC-App (siehe Referenzimplementierung in packages/apps/Car/DebuggingRestrictionController
). Die Referenz-App umfasst die Logik zum Empfangen eines Zugriffstokens vom Tokenaussteller, zum Validieren des Tokens und zum anschließenden Anwenden von Debugging-Einschränkungsänderungen, wie im Token angegeben. Die Logik umfasst grundlegende UX-Elemente auf der Fahrzeugseite.
Was ist der Token-Emittent?
Dies ist ein Webdienst, der kryptografisch signierte Zugriffstoken ausgibt (siehe Referenzimplementierung in packages/apps/Car/DebuggingRestrictionController/server
). Der Referenz-Webdienst ist eine bereitstellbare Firebase Cloud-Funktion (weitere Informationen finden Sie unter Cloud-Funktionen für Firebase ).
Voraussetzungen
Bevor Sie eine Referenzimplementierung bereitstellen, müssen Sie unbedingt die folgenden Aufgaben ausführen.
Bereiten Sie Zertifikate zum Signieren von Zugriffstoken vor
Der Token-Aussteller generiert JSON Web Signatures (JWS) als Zugriffstoken. Für eine optimale Kompatibilität unterstützt der Referenzherausgeber nur den RS256-Algorithmus (RSA-Signaturen mit SHA256). Um die Schlüsselrotation zu erleichtern, verwenden Sie zum Signieren von Zugriffstokens eine Zertifikatskette anstelle eines einzelnen Zertifikats. Eine typische Zertifikatskette sollte aus einem Stamm-CA-Zertifikat, einem Zwischen-CA-Zertifikat und einem End-Entity-Zertifikat bestehen.
Das Endentitätszertifikat, das die JWS-Token signiert, unterscheidet sich nicht von einem Standard-TLS-Zertifikat. Sie können entweder ein Zertifikat von öffentlichen Zertifizierungsstellen wie DigiCert erwerben oder Ihre eigene Zertifikatskette mithilfe selbstsignierter Root-CA-Zertifikate oder Hardware-Sicherheitsmodule verwalten. Das Endentitätszertifikat sollte ein X509v3-Zertifikat mit der Erweiterung Subject Alternative Name (SAN) 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
bereit.
Richten Sie Firebase ein
Der Referenz-Token-Aussteller verwendet Firebase Authentication und Firebase Cloud Function .
So richten Sie Ihr Firebase-Konto ein:
- Informationen zum Erstellen eines Firebase-Projekts finden Sie unter Hinzufügen von Firebase zu Ihrem Android-Projekt .
- Informationen zum Aktivieren einiger Firebase-Authentifikatoren finden Sie unter Wo fange ich mit der Firebase-Authentifizierung an? .
- Informationen zum Hinzufügen einer leeren Firebase Cloud-Funktion finden Sie unter Erste Schritte .
- Falls noch nicht geschehen, installieren Sie die Tools
Node.js
, NPM und Firebase, um den Token-Aussteller zu kompilieren und bereitzustellen.
Integrieren Sie die DRC-App
Die Referenz-DRC-App befindet sich in packages/apps/Car/DebuggingRestrictionController
. Die App kann gebündelt in AOSP mit Soong oder entbündelt mit Gradle erstellt werden.
Gebündelter Build
So erstellen Sie eine gebündelte App:
- Kopieren Sie
applicationId
,projectId
undapiKey
ausgoogle-services.json
inpackages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
. Dadurch kann die DRC-App eine korrekte Verbindung zu Firebase herstellen. - 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 Stamm-CA-Zertifikat, das inROOT_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 Endentitätszertifikat übereinstimmen, das die Zugriffstoken signiert. -
DRC_TEST_EMAIL
undDRC_TEST_PASSWORD
sind Anmeldeinformationen für ein optionales Testkonto, das in Firebase vorab bereitgestellt werden kann, wenn Sie die E-Mail-/Passwort-Anmeldung aktiviert haben. Diese werden nur für instrumentierte Tests verwendet.
-
Die App ist jetzt für die Verwendung Ihres Firebase-Kontos und Ihrer Zertifikate konfiguriert. In Android 9 und höher müssen Sie die Zulassungsliste für privilegierte Berechtigungen 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>
Entbündelter Aufbau
Entbündelte DRC-Builds verwenden Gradle zum Kompilieren der App.
So erstellen Sie einen entbündelten Build:
- Bestätigen Sie, dass Sie das Android SDK installiert haben.
- Erstellen Sie eine Textdatei mit dem Namen
local.properties
im Stammverzeichnis der App. - Legen Sie den Speicherort des Android SDK fest:
sdk.dir=path/to/android/sdk
- Um Firebase einzurichten, kopieren Sie
google-services.json
nachpackages/apps/Car/DebuggingRestrictionController/app
. Gradle analysiert die Datei und richtet den Rest automatisch ein. - 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
L: Anmeldeinformationen für ein Testkonto, nur Debug-Builds.
-
- Um die App mit Gradle zu erstellen, führen Sie einen Befehl wie diesen aus:
$ ./gradlew build
Integrieren Sie den Token-Aussteller
Der Referenz-Token-Aussteller ist eine Firebase Cloud Function, die in Node.js
implementiert ist. Die Funktion kann nur von einem authentifizierten Benutzer aufgerufen werden. Bevor Sie die App bereitstellen, müssen Sie den privaten Schlüssel und die Zertifikate einrichten, die zum Signieren der JWS-Tokens verwendet werden.
- 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 Endentitätszertifikat zuerst und dem Stamm-CA-Zertifikat am Ende bestellt. Der Ablaufzeitraum ist anpassbar und kann auf eine längere Dauer eingestellt werden, wenn ein ausgegebener Token einige Zeit benötigt, bevor er von einer DRC-App empfangen und verbraucht werden kann. Der Token-Widerruf wird nicht unterstützt.
- Laden Sie die Konfiguration in Firebase hoch:
- Stellen Sie die Firebase Cloud-Funktion bereit:
- Informationen zum Verwalten und Überwachen Ihres Token-Ausstellers finden Sie unter Verwalten der Funktionsbereitstellung und Laufzeitoptionen .
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
Legen Sie Standardeinschränkungen fest
Vor dem ersten Start können Standardeinschränkungen angewendet werden. Tun Sie dies mit statischen Ressourcen-Overlays, um die Standardeinstellungen im Android-Framework zu überschreiben. Einschränkungen können jeweils auf verschiedene Benutzertypen angewendet werden. Weitere Informationen zu den verschiedenen Benutzertypen finden Sie unter Multi-User-Support .
Die Standardeinschränkung für den Headless-Systembenutzer kann mit dem String-Array config_defaultFirstUserRestrictions
in frameworks/base/core/res/res/values/config.xml
konfiguriert werden. Durch das Festlegen dieser Einschränkung wird Android Debug Bridge (ADB) automatisch deaktiviert, bis die Einschränkung aufgehoben wird, zum Beispiel:
<string-array translatable="false" name="config_defaultFirstUserRestrictions"> <item>no_debugging_features</item> </string-array>
Die Standardeinschränkungen für reguläre Benutzer (z. B. Fahrer und Passagiere) und Gäste können in frameworks/base/core/res/res/xml/config_user_types.xml
konfiguriert werden. 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>