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,平台在每次連線時驗三件事:
- 憑證鏈接得回平台信任的 CA。
- 這個 AID 的憑證是目前有效的那一張(換發後舊的立刻失效)。
- AID 的狀態允許連線(
active,不是pending/revoked/retired)。
一個 AID 同時只有一張有效憑證。要換發就走換發流程,不要自己簽第二張。
兩種取得方式
AID 由生產專案的 CA 簽好、匯入平台的池子;你在本站「AID」頁下單,平台核准後從池子照單配發。每一項都指定交給誰:
交給工廠(量產,燒錄)
配發給工廠的那一批,匯出成一個檔案(每行一台:device_id、憑證、加密過的私鑰),在產線燒進設備。
只能匯出一次:匯出的同時平台刪掉自己手上的私鑰。下載中斷就作廢這一批、重新配發。設備出廠就帶著 AID,配對時用它的憑證連雲。
交給成員(開發、小批量測試)
配發給組織裡某位成員的,留在平台上、掛在他名下,直到他配對一台還沒有 AID 的設備時才送進去:
- App 發現設備沒有 AID(配網時的 DeviceInfo 回
identity: "none"),提示「要從你的額度配發一顆嗎?」。 - App 開配對 session 時帶
allocate_aid: true,照一般流程把配對碼交給設備。 - 設備不帶用戶端憑證、用一般 TLS 兌換配對碼,body 多帶
model與mac。 - 平台從那位成員名下取一顆型號相符的,回給設備
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 環境真的配發幾台,格式與檢驗碼都會對。