調試限制控制器集成指南

使用以下說明集成 AAOS 調試限制控制器 (DRC)。

圖1.應用DRC例如

建築學

DRC 架構如下圖所示。以紅色標出的組件(令牌發行者和首次亮相的限制控制器)具有您可以自定義的隨附參考實現。

圖2. DRC架構

什麼是剛果民主共和國?

車頭單元包括剛果(金)的應用程序(見參考實現packages/apps/Car/DebuggingRestrictionController )。參考應用程序包括用於從令牌頒發者接收訪問令牌、驗證令牌,然後應用令牌中指定的調試限制更改的邏輯。該邏輯包括汽車側的基本 UX 元素。

什麼是代幣發行人?

這是一個Web服務的問題的加密簽名的訪問令牌(見參考實現packages/apps/Car/DebuggingRestrictionController/server )。參考Web服務是一種部署火力地堡雲功能(了解更多信息,請參閱雲功能的火力地堡)。

先決條件

在部署參考實現之前,請務必完成以下任務。

準備用於簽署訪問令牌的證書

令牌頒發者生成 JSON Web 簽名 (JWS) 作為訪問令牌。為獲得最佳兼容性,參考發行人僅支持 RS256 算法(使用 SHA256 的 RSA 簽名)。為了促進密鑰輪換,請使用證書鏈而不是單個證書來簽署訪問令牌。典型的證書鏈應包括根 CA 證書、中間 CA 證書和最終實體證書。

簽署 JWS 令牌的最終實體證書與標準 TLS 證書沒有什麼不同。您可以從 DigiCert 等公共 CA 購買證書,也可以使用自簽名根 CA 證書或硬件安全模塊維護自己的證書鏈。最終實體證書應該是帶有主題備用名稱 (SAN) 擴展名的 X509v3 證書。 SAN 擴展包含令牌發行者的標識符(例如,主機名)。最後,RSA 證書應優先於 EC 證書,因為令牌頒發者僅支持 RS256。

谷歌提供了生成自簽名證書shell腳本packages/apps/Car/DebuggingRestrictionController/server/genkey.sh

設置 Firebase

參考令牌頒發使用火力地堡認證火力地堡的雲功能

要設置您的 Firebase 帳戶:

  1. 要創建一個火力地堡項目,請參閱添加火力地堡到您的Android項目
  2. 為了使一些火力地堡鑑定人,看到哪裡有火力地堡認證開始? .
  3. 要添加一個空火力地堡雲功能,請參閱入門
  4. 如果尚未完成,請安裝 Node.js、NPM 和 Firebase 工具以編譯和部署 Token Issuer。

集成 DRC 應用程序

參考DRC應用程序位於packages/apps/Car/DebuggingRestrictionController 。這個應用程序可以內置捆綁AOSP與宋楚瑜或與非捆綁搖籃

捆綁構建

要構建捆綁應用程序:

  1. 副本applicationIdprojectIdapiKeygoogle-services.jsonpackages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java 。這樣做可使 DRC 應用程序正確連接到 Firebase。
  2. 在更新這些常量packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
    • TOKEN_USES_SELF_SIGNED_CA表示如果使用自簽名根CA證書。如果啟用,在指定的剛果(金)的應用程序只信任PEM編碼的根CA證書ROOT_CA_CERT
    • TOKEN_ISSUER_API_NAME是火力地堡雲功能的名稱,應與您在火力地堡控制台前面創建的雲功能。
    • TOKEN_ISSUER_HOSTNAME應匹配將簽署訪問令牌的終端實體證書的主題備用名稱。
    • DRC_TEST_EMAILDRC_TEST_PASSWORD是一個可選的測試帳戶憑據,可如果你啟用了電子郵件/密碼登錄預先提供的火力地堡。這些僅用於儀器測試。

該應用現已配置為使用您的 Firebase 帳戶和您的證書。在Android的9或更高,必須設置特權權限Allowlisting 。在允許列表必須至少包含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 來編譯應用程序。

要創建非捆綁構建:

  1. 確認您已安裝 Android SDK。
  2. 創建一個名為一個文本文件local.properties在應用程序的根目錄。
  3. 設置Android SDK中的位置:
     sdk.dir=path/to/android/sdk
    
  4. 要設置火力地堡,複製google-services.jsonpackages/apps/Car/DebuggingRestrictionController/app 。 Gradle 解析文件並自動設置其餘部分。
  5. 定義環境變量。與捆綁構建一樣,您必須指定:
    • $TOKEN_USES_SELF_SIGNED_CA :true或false;
    • $ROOT_CA_CERT :路徑PEM編碼根CA證書;
    • $TOKEN_ISSUER_API_NAME :在火力地堡雲功能的名稱;
    • $TOKEN_ISSUER_HOST_NAME :SAN的證書;
    • $DRC_TEST_EMAIL$DRC_TEST_EMAI L:用於測試帳戶憑據,調試只依據。
  6. 為了建立與搖籃的應用程序,運行如下命令:
    $ ./gradlew build
    

整合代幣發行者

參考令牌頒發者是在 Node.js 中實現的 Firebase Cloud Function。該函數只能由經過身份驗證的用戶調用。在部署應用程序之前,您必須設置用於簽署 JWS 令牌的私鑰和證書。

  1. 填充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"
    }
    

    證書按最終實體證書和根 CA 證書一起排序。如果發行的令牌需要一些時間才能被 DRC 應用程序接收和使用,則過期期限是可自定義的並且可以設置為更長的持續時間。不支持令牌撤銷。

  2. 將配置上傳到 Firebase:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. 部署 Firebase 雲函數:
  5. $ firebase deploy --only functions
    
  6. 為了管理和監控代幣發行者,看管理功能的部署和運行時選項

設置默認限制

可以在第一次啟動之前應用默認限制。使用靜態資源覆蓋來覆蓋 Android 框架中的默認值。可以分別對不同類型的用戶進行限制。要了解不同類型的用戶,看到多用戶支持

用於無頭系統用戶的初始限制值可以與被配置config_defaultFirstUserRestrictions在串陣列frameworks/base/core/res/res/values/config.xml 。設置此限制會自動禁用 Android 調試橋 (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>