偵錯限制控制器整合指南

按照本頁的操作說明整合 AAOS 偵錯限制控制器 (剛果民主共和國)。

圖 1. DRC 應用程式範例。

建築

DRC 架構如圖 2 所示。以紅色標示的元件 (符記核發者和 DRC) 隨附您可自訂的參考實作。

圖 2. 剛果民主共和國架構。

什麼是剛果民主共和國?

車輛車用運算主機包含剛果民主共和國應用程式 (請參閱 packages/apps/Car/DebuggingRestrictionController)。參考應用程式包含 接收來自權杖核發者的存取權杖、驗證權杖的邏輯,以及 然後套用權杖中指定的偵錯限制變更。邏輯包括 基本使用者體驗元素。

什麼是權杖核發者?

此網路服務會核發加密簽署的存取權杖 (請參閱 packages/apps/Car/DebuggingRestrictionController/server 中的實作)。 參考 Web 服務是可部署的 Firebase Cloud 函式 (詳情請參閱 Cloud Functions Firebase)。

必要條件

部署參考實作之前,請務必先完成下列工作。

準備憑證以簽署存取權杖

權杖核發者會產生 JSON Web Signatures (JWS) 做為存取權杖。獲得最佳效果 相容性,參照核發機構僅支援 RS256 演算法 (採用 SHA256 的 RSA 簽名)。 如要協助輪替金鑰,請使用憑證鏈結 (而非單一憑證) 簽署 存取權杖一般的憑證鏈結應包含根 CA 憑證。 中繼 CA 憑證和終端實體憑證。

簽署 JWS 權杖的終端實體憑證與標準 TLS 沒有差別 憑證您可以向 DigiCert 等公開憑證授權單位購買憑證,也可以採用 自行簽署的根憑證授權單位憑證或硬體安全性模組。 終端實體憑證應為具有主體別名的 X509v3 憑證 (SAN) 副檔名。SAN 擴充功能包含權杖的 ID (例如主機名稱) 核發者。最後,就應該優先採用 RSA 憑證,而非 EC 憑證 核發者僅支援 RS256。

Google 提供殼層指令碼,用於產生自行簽署的憑證 packages/apps/Car/DebuggingRestrictionController/server/genkey.sh

設定 Firebase

參照權杖核發機構會使用 Firebase 驗證Firebase Cloud 函式

若要設定 Firebase 帳戶:

  1. 如要建立 Firebase 專案,請參閱 將 Firebase 加入 Android 專案
  2. 如要啟用部分 Firebase 驗證器,請參閱 我在哪裡? 要開始使用 Firebase 驗證功能嗎?
  3. 如要新增空白的 Firebase Cloud 函式,請參閱 取得 已開始
  4. 請先安裝 Node.js、NPM 和 Firebase 工具,以便編譯及 並部署憑證核發者

整合剛果民主共和國應用程式

參考 DRC 應用程式位於 packages/apps/Car/DebuggingRestrictionController。這個應用程式 隨附於 Android 開放原始碼計畫,並搭配 Soong未隨附Gradle

套裝組合版本

如何建構隨附應用程式:

  1. 複製 applicationIdprojectIdapiKeygoogle-services.jsonpackages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java。 以便讓剛果民主共和國應用程式正確連結至 Firebase。
  2. 請更新這些常數,做法如下: packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java:
    • TOKEN_USES_SELF_SIGNED_CA 表示自行簽署的根 CA 憑證是否 啟用後,DRC 應用程式只會信任 ROOT_CA_CERT
    • TOKEN_ISSUER_API_NAME 是 Firebase Cloud 函式的名稱, 與您先前在 Firebase 控制台中建立的 Cloud 函式進行比對。
    • TOKEN_ISSUER_HOSTNAME 應與 用來簽署存取權杖的終端實體憑證。
    • DRC_TEST_EMAILDRC_TEST_PASSWORD 是 選擇性測試帳戶 (如果您已啟用相關設定,可透過 Firebase 預先佈建) 電子郵件/密碼登入。這些限制只會用於檢測設備測試。

應用程式現已設定成使用您的 Firebase 帳戶和憑證。 在 Android 9 以上版本中,你必須 特殊權限許可清單。 許可清單至少必須含有 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. 如要設定 Firebase,請將「google-services.json」複製到 packages/apps/Car/DebuggingRestrictionController/app。Gradle 剖析檔案 自動設定其餘的
  5. 定義環境變數。與隨附版本一樣,您必須指定:
    • $TOKEN_USES_SELF_SIGNED_CA:true 或 false;
    • $ROOT_CA_CERT:PEM 編碼根 CA 憑證的路徑;
    • $TOKEN_ISSUER_API_NAME:Firebase Cloud 函式的名稱;
    • $TOKEN_ISSUER_HOST_NAME:憑證中的 SAN;
    • $DRC_TEST_EMAIL$DRC_TEST_EMAIL:測試的憑證 帳戶,僅限偵錯版本。
  6. 如要使用 Gradle 建構應用程式,請執行下列指令:
    $ ./gradlew build
    

整合權杖核發者

參考權杖核發者是 Node.js 中實作的 Firebase Cloud 函式。 只有經過驗證的使用者才能呼叫函式。在部署應用程式之前 註冊用來簽署 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 Cloud 函式:
  5. $ firebase deploy --only functions
    
  6. 如要管理及監控權杖核發者,請參閱 管理 函式部署與執行階段選項

設定預設限制

首次啟動前可以套用預設限制。使用靜態資源執行此操作 以覆寫 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>