Используйте следующие инструкции для интеграции контроллера ограничения отладки AAOS (DRC).
Рисунок 1. Пример приложения УСПД
Архитектура
Архитектура DRC проиллюстрирована ниже. Компоненты, выделенные красным (эмитент токена и дебютный контроллер ограничений), имеют сопутствующие эталонные реализации, которые вы можете настроить.
Архитектура Рисунок 2. DRC
Что такое ДРК?
Устройство автомобиля головка включает приложение DRC (см эталонную реализацию в packages/apps/Car/DebuggingRestrictionController
). Эталонное приложение включает в себя логику для получения маркера доступа от эмитента маркера, проверки маркера и последующего применения изменений ограничения отладки, как указано в маркере. Логика включает в себя базовые элементы UX на стороне автомобиля.
Что такое эмитент токена?
Это веб - сервис, вопросы криптографической подписи токенов (см эталонной реализации в packages/apps/Car/DebuggingRestrictionController/server
). Ссылка веб - сервис является развертываемой функцией Firebase Облако (чтобы узнать больше, см Облака функции для Firebase ).
Предпосылки
Перед развертыванием эталонной реализации обязательно выполните следующие задачи.
Подготовка сертификатов для подписи токенов доступа
Эмитент токенов генерирует веб-подписи JSON (JWS) в качестве токенов доступа. Для оптимальной совместимости эмитент ссылок поддерживает только алгоритм RS256 (подписи RSA с SHA256). Чтобы упростить ротацию ключей, используйте цепочку сертификатов вместо одного сертификата для подписи токенов доступа. Типичная цепочка сертификатов должна состоять из сертификата корневого ЦС, промежуточного сертификата ЦС и сертификата конечного объекта.
Сертификат конечного объекта, подписывающий токены JWS, ничем не отличается от стандартного сертификата TLS. Вы можете приобрести сертификат в общедоступных центрах сертификации, таких как DigiCert, или поддерживать собственную цепочку сертификатов, используя самозаверяющие корневые сертификаты ЦС или аппаратные модули безопасности. Сертификат конечного объекта должен быть сертификатом X509v3 с расширением альтернативного имени субъекта (SAN). Расширение SAN содержит идентификатор (например, имя хоста) эмитента токена. Наконец, сертификаты RSA должны быть предпочтительнее сертификатов EC, потому что эмитент токенов поддерживает только RS256.
Google предоставляет скрипт для создания собственных сертификатов в packages/apps/Car/DebuggingRestrictionController/server/genkey.sh
.
Настройка Firebase
Ссылка Токен Эмитент использует Firebase аутентификации и Firebase Облако функции .
Чтобы настроить учетную запись Firebase:
- Для создания проекта Firebase см Добавить Firebase в свой Android проекта .
- Для того, чтобы включить некоторые аутентификаторы Firebase см Где я могу начать с Firebase аутентификацией? .
- Чтобы добавить пустую функцию Firebase Облака, см НАЧАТЬ .
- Если это еще не сделано, установите Node.js, NPM и Firebase Tools, чтобы скомпилировать и развернуть Token Issuer.
Интеграция приложения DRC
Приложение ссылки DRC находится в packages/apps/Car/DebuggingRestrictionController
. Приложение может быть построено в комплекте с AOSP Soong или несвязанный с Gradle .
Сборка в комплекте
Чтобы создать связанное приложение:
- Скопируйте
applicationId
,projectId
иapiKey
отgoogle-services.json
вpackages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
. Это позволит приложению DRC правильно подключиться к Firebase. - Обновление этих констант в
packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
:-
TOKEN_USES_SELF_SIGNED_CA
указывает , если используются собственные сертификаты CA корневые. Если включена, то приложение доверяет DRC только PEM-закодированный сертификат корневого центра сертификации , указанный вROOT_CA_CERT
. -
TOKEN_ISSUER_API_NAME
этого имя функции Firebase Cloud и должны соответствовать функциям Cloud созданных ранее в Firebase консоли. -
TOKEN_ISSUER_HOSTNAME
должен соответствовать Subject Alternative Name в сертификате конечного объекта , который будет подписывать маркеры доступа. -
DRC_TEST_EMAIL
иDRC_TEST_PASSWORD
являются учетными данными для необязательной тестовой учетной записи, которая может быть предварительно инициализирована в Firebase , если вы включили Email / Пароль вход. Они используются только для инструментальных тестов.
-
Теперь приложение настроено для использования вашей учетной записи Firebase и ваших сертификатов. В Android 9 и выше, вы должны установить привилегированное разрешение Allowlisting . Allowlist должен содержать по крайней мере android.permission.MANAGE_USERS
. Например:
<permissions> <privapp-permissions package="com.android.car.debuggingrestrictioncontroller"> <permission name="android.permission.INTERNET"/> <permission name="android.permission.MANAGE_USERS"/> </privapp-permissions> </permissions>
Несвязанная сборка
Разделенные сборки DRC используют Gradle для компиляции приложения.
Чтобы создать разделенную сборку:
- Убедитесь, что вы установили Android SDK.
- Создайте текстовый файл с именем
local.properties
в корневом каталоге приложения. - Установить местоположение Android SDK:
sdk.dir=path/to/android/sdk
- Чтобы настроить Firebase, копировать
google-services.json
дляpackages/apps/Car/DebuggingRestrictionController/app
. Gradle анализирует файл и автоматически настраивает остальное. - Определите переменные среды. Как и в случае связанных сборок, вы должны указать:
-
$TOKEN_USES_SELF_SIGNED_CA
: истина или ложь; -
$ROOT_CA_CERT
: путь к сертификату корневого ЦС PEM-закодированы; -
$TOKEN_ISSUER_API_NAME
: имя функции Firebase Cloud; -
$TOKEN_ISSUER_HOST_NAME
: SAN в сертификате; -
$DRC_TEST_EMAIL
и$DRC_TEST_EMAI
L: учетные данные для тестовой учетной записи, отладка строят только.
-
- Для того, чтобы построить приложение с Gradle, выполните команду:
$ ./gradlew build
Интеграция эмитента токенов
Эталонный эмитент токена - это облачная функция Firebase, реализованная в Node.js. Функция может быть вызвана только аутентифицированным пользователем. Перед развертыванием приложения необходимо настроить закрытый ключ и сертификаты, используемые для подписи токенов JWS.
- Заполняем файл в формате JSON со следующим содержимым:
{ "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" }
Сертификаты упорядочиваются так, чтобы вначале был сертификат конечного объекта, а в конце - сертификат корневого центра сертификации. Срок действия настраивается и может быть увеличен, если выпущенному токену требуется некоторое время, прежде чем он может быть получен и использован приложением DRC. Отзыв токена не поддерживается.
- Загрузите конфигурацию в Firebase:
- Разверните функцию Firebase Cloud:
- Для того, чтобы управлять и контролировать свой токен эмитентом см Управления развертывания функций и выполнение опций .
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
Установка ограничений по умолчанию
Ограничения по умолчанию могут быть применены до первой загрузки. Сделайте это с помощью статических наложений ресурсов, чтобы переопределить значения по умолчанию в платформе Android. Ограничения могут применяться соответственно к разным типам пользователей. Для того, чтобы узнать о различных типах пользователей см Поддержка нескольких пользователей .
Ограничение по умолчанию для пользователя системы без головы может быть сконфигурирован с config_defaultFirstUserRestrictions
строки массива в frameworks/base/core/res/res/values/config.xml
. Установка этого ограничения автоматически отключает Android Debug Bridge (ADB) до тех пор, пока ограничение не будет снято, например:
<string-array translatable="false" name="config_defaultFirstUserRestrictions"> <item>no_debugging_features</item> </string-array>
Ограничения по умолчанию для обычных пользователей (например, водителей и пассажиров), и гости могут быть сконфигурированы в frameworks/base/core/res/res/xml/config_user_types.xml
. Вы можете наложить эти строки, чтобы установить ограничения по умолчанию для каждого типа пользователей соответственно, например:
<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>