Kinio 回報問題 登入

AID 與憑證

讀完你會知道:AID 是什麼、設備實際用到哪個編號、怎麼取得(交給成員或工廠)、生命週期與不要做的事。

AID 是設備在平台上的身分。 每一個能自己行動的東西都有一個:實體設備、gateway 底下的子設備、虛擬設備、雲端 agent。人用帳號,App 用 OAuth client id,都不發 AID。

AID 不是一串字,是一筆註冊紀錄

AID 是平台幫一台設備建立的完整身分紀錄:設備編號、憑證與金鑰綁定、等級、狀態、型號與 地區、能力上限。你在本站買的、在後台看到的「一個 AID」,指的是這整筆紀錄。

紀錄本身有個內部編號 aid_id(aid- 開頭,30 字元),那是資料庫的鍵,你平常不會用到它。

你會實際看到並用到的是 device_id

燒進設備、印在標籤上、放進憑證 CN、在後台搜尋用的,都是 device_id:

CAM-H575R6H85RJ2H780-2

「三碼品類代號 - 16 字元序號 - 一碼檢驗碼」,含兩個連字號共 22 字元。

  • CAM 等三碼品類在 registry 裡查得到完整清單。
  • 序號不透明,不編進品牌或型號資訊。
  • 最後一碼是檢驗碼,可以離線檢查字串有沒有抄錯。
如果你也在接 v1/v2 的舊平台:那邊的 v1PID 與 v1DID 各是 32 字元、沒有連字號,
一對一,兩個都能單獨標示一台設備。它們跟上面的 device_id 不是同一個東西,長度也不同,
不要混用;新設備不會有 v1PID / v1DID。

>

還有一個會咬人的差別:v1DID 不是永久的——使用者做原廠重置之後它會換一個新的
(v1PID 不變,而且仍然一對一)。要長期記一台舊設備,存 v1PID。
Kinio 的 device_id 則是永久的,原廠重置不會變。

一個 AID 對應一張憑證

生產專案的 CA 簽發用戶端憑證,CN 就是 device_id。設備用這張憑證做 mTLS,平台在每次連線時驗三件事:

  1. 憑證鏈接得回平台信任的 CA。
  2. 這個 AID 的憑證是目前有效的那一張(換發後舊的立刻失效)。
  3. AID 的狀態允許連線(active,不是 pending / revoked / retired)。

一個 AID 同時只有一張有效憑證。要換發就走換發流程,不要自己簽第二張。

兩種取得方式

AID 由生產專案的 CA 簽好、匯入平台的池子;你在本站「AID」頁下單,平台核准後從池子照單配發。每一項都指定交給誰:

交給工廠(量產,燒錄)

配發給工廠的那一批,匯出成一個檔案(每行一台:device_id、憑證、加密過的私鑰),在產線燒進設備。

只能匯出一次:匯出的同時平台刪掉自己手上的私鑰。下載中斷就作廢這一批、重新配發。設備出廠就帶著 AID,配對時用它的憑證連雲。

交給成員(開發、小批量測試)

配發給組織裡某位成員的,留在平台上、掛在他名下,直到他配對一台還沒有 AID 的設備時才送進去:

  1. App 發現設備沒有 AID(配網時的 DeviceInfo 回 identity: "none"),提示「要從你的額度配發一顆嗎?」。
  2. App 開配對 session 時帶 allocate_aid: true,照一般流程把配對碼交給設備。
  3. 設備不帶用戶端憑證、用一般 TLS 兌換配對碼,body 多帶 model 與 mac。
  4. 平台從那位成員名下取一顆型號相符的,回給設備 did、cert_pem、enc_private_key;設備自己解私鑰、存下來,再用新憑證正常上線。

同一台(同一個 session、同一個 MAC)重送會拿回同一顆;名下沒有這個型號會回 model_not_in_quota,完全沒有額度回 quota_exhausted。App 不經手私鑰。

「AID」頁的「可用額度」看得到每位成員名下還剩幾顆。

等級決定能做什麼

每個 AID 有一個等級,等級定義了這個設備最多能用哪些能力(錄影、控制、韌體更新…)。等級是上限,不是開關:家戶裡的實際權限還要看使用者給了什麼。

下單時用品類(TYPE)的預設等級;需要別的等級在訂單備註說明。

生命週期

pending  →  active  →  (revoked | retired)
   ↑          ↓
   └── 換發憑證 ──┘
  • pending:已配發、還沒啟用。設備第一次配對成功就啟用(平台同時鎖定它的 MAC)。
  • active:正常運作。
  • revoked:憑證作廢(遺失、外洩、退貨)。設備立刻連不上。
  • retired:設備報廢。

每一次狀態變更都是 append-only 的事件,查得到誰在什麼時候做了什麼。

位置

「這個 AID 現在在哪個環境、哪個區域」在全平台只有一份紀錄。設備配對進哪個家戶,就寫哪個環境。

設備開機時問 directory:

GET https://<directory 主機名>/v1/locate/{device_id}

(路徑參數叫 {aid},填的是設備的 device_id。)

回應會給這台設備所屬環境的端點集。查不到與還沒指派都回同樣的「未指派」,不會洩漏哪些設備存在。回應可以快取 60 秒。

不要這樣做

  • 不要把私鑰上傳到任何地方,包括寄給我們除錯。需要重簽就換發。
  • 不要在多台設備間共用 AID。平台以 AID 為單位算在線狀態、歸屬與權限,共用會讓兩台互踢。
  • 不要自己拼 device_id 測試。 用 dev 環境真的配發幾台,格式與檢驗碼都會對。