X.509 憑證證明
本文說明在裝置布建服務 (DPS) 中使用 X.509 憑證證明布建裝置時所涉及的概念。 本文與為裝置進行部署準備工作的所有角色相關。
X.509 憑證可以儲存在硬體安全性模組 (HSM) 中。
提示
強烈建議您搭配使用 HSM 與裝置,在生產環境中的裝置上安全地儲存祕密,例如 X.509 憑證。
瞭解 X.509 憑證鏈結
使用 X.509 憑證作為證明機制,是調整生產環境規模並簡化裝置佈建的絕佳方式。 X.509 憑證通常會排列在信任的憑證鏈結中,其中鏈結中的每個憑證都是由下一個較高憑證的私密金鑰所簽署,依此類推,並終止於自我簽署根憑證中。 此安排會透過每個中繼憑證,從受信任的證書頒發機構單位 (CA) 所產生的跟證書建立委派的信任鏈結,到裝置上安裝的最終憑證。 若要深入了解,請參閱使用 X.509 CA 憑證進行裝置驗證。
憑證鏈結通常代表與裝置相關聯的邏輯或實體階層。 例如,製造商可能會建立下列憑證階層:
- 自我簽署的根 CA 憑證會開始憑證鏈結。
- 跟證書會為每個處理站產生唯一的中繼 CA 憑證。
- 每個處理站的憑證都會為工廠中的每個生產線產生唯一的中繼 CA 憑證。
- 生產線憑證會針對該生產線上製造的每個裝置產生唯一的裝置(端實體)憑證。
若要深入了解,請參閱概念性了解 IoT 產業中的 X.509 CA 憑證。
根憑證
跟 證書 是自我簽署的 X.509 憑證,代表證書頒發機構單位 (CA)。 它是憑證鏈結的終端或信任錨點。 根憑證可由組織自行發行,或從根憑證授權單位購買。 跟證書也可以稱為 跟證書 CA 憑證。
中繼憑證
中繼 憑證是由跟證書 簽署的 X.509 憑證(或其鏈結中有跟證書的另一個中繼憑證)簽署,也可以簽署新的憑證。 鏈結中的最後一個中繼憑證會簽署分葉憑證。 中繼憑證也可以稱為 中繼 CA 憑證。
中繼憑證會以各種方式使用。 例如,中繼憑證可用來依生產線、客戶購買裝置、公司部門或工廠來分組裝置。
假設 Contoso 是一家擁有自己公鑰基礎結構 (PKI) 的大型公司,其使用名為的 ContosoRootCert
跟證書。 Contoso 的每個子公司都有自己的中繼憑證,由 簽署 ContosoRootCert
。 每個子公司都會使用其中繼憑證來簽署每個裝置的分葉憑證。 在此案例中,Contoso 可以使用單一 DPS 實例,其中 ContosoRootCert
是已驗證的憑證。 他們可以針對每個子公司各有一個註冊群組。 如此一來,每個個別子公司就不需要擔心驗證憑證。
終端實體「分葉」憑證
分 葉憑證或 實體憑證會識別憑證持有者。 它在其憑證鏈結中有根憑證,以及零或多個中繼憑證。 分葉憑證不會用來簽署任何其他憑證。 它會唯一識別布建服務的裝置,有時稱為 裝置憑證。 在驗證期間,裝置會使用與其憑證相關聯的私鑰來回應服務的擁有證明挑戰。
搭配 DPS 使用 X.509 憑證
佈建服務會公開兩種註冊類型,您可以用來控制使用 X.509 證明機制的裝置存取:
- 個別註冊項目是以與特定裝置相關聯的裝置憑證來設定的。 這些項目可控制特定裝置的註冊。
- 註冊群組項目是與特定的中繼或根 CA 憑證相關聯的。 這些項目會控制在其憑證鏈結中具有該中繼或根憑證的所有裝置的註冊。
您的 DPS 執行個體中只能指定一個註冊項目中憑證。
相互 TLS 支援
當 DPS 註冊設定為 X.509 證明時,DPS 支援相互 TLS (mTLS)。
DPS 加密演算法需求
裝置布建服務只接受使用 Rivest-Shamir-Adleman (RSA) 演算法或橢圓曲線密碼編譯 (ECC) 演演算法進行加密的 X.509 憑證。 ECC 和 RSA 提供同等層級的加密強度,但 ECC 會使用較短的密鑰長度。
如果您使用 ECC 方法來產生 X.509 憑證以進行裝置證明,建議您使用下列橢圓曲線:
- nistP256
- nistP384
- nistP521
DPS 憑證命名需求
與個別註冊專案搭配使用的分葉憑證必須將主體通用名稱 (CN) 設定為註冊識別碼。 註冊識別碼會識別使用 DPS 的裝置註冊,而且在裝置註冊所在的 DPS 執行個體 (識別碼範圍) 必須為唯一。
針對註冊群組,主體通用名稱 (CN) 會設定向 IoT 中樞 註冊的裝置標識碼。 裝置識別碼會顯示在註冊群組中的已驗證裝置註冊記錄中。 針對個別註冊,可以在註冊項目中設定裝置識別碼。 如果未在註冊項目中設定,則會使用主體一般名稱 (CN)。
若要深入了解,請參閱驗證以 X.509 CA 憑證簽署的裝置。
DPS 裝置鏈結需求
當裝置嘗試透過 DPS 使用註冊群組進行註冊時,裝置必須將憑證鏈結從分葉憑證傳送至使用 已驗證的憑證。 否則,驗證會失敗。
例如,如果只驗證根憑證,並將中繼憑證上傳至註冊群組,則裝置應該向已驗證的根憑證顯示來自分葉憑證的憑證鏈結。 此憑證鏈結會包含任何中間憑證。 如果 DPS 無法周遊憑證鏈結至已驗證的憑證,驗證就會失敗。
例如,假設公司使用下列裝置鏈結來進行裝置。
在此範例中,跟證書會使用 DPS 進行驗證,並在 intermediate2
註冊群組上上傳憑證。
如果裝置在布建期間只傳送下列裝置鏈結,驗證就會失敗。 因為 DPS 無法嘗試驗證,因為假設憑證有效 intermediate1
。
如果裝置在佈建期間傳送完整的裝置鏈結,則 DPS 可以嘗試驗證裝置。
具有憑證的 DPS 作業順序
當裝置連線到佈建服務時,服務會從裝置 (分葉) 憑證開始逐步執行其憑證鏈結,並尋找對應的註冊項目。 該服務會使用鏈結中找到的第一個項目來判斷是否要佈建裝置。 也就是說,如果裝置憑證的個別註冊存在,布建服務就會套用該專案。 如果裝置沒有個別註冊,則服務會尋找對應至第一個中繼憑證的註冊群組。 如果找到一個專案,則會套用該專案;否則,它會在鏈結至根目錄尋找下一個中繼憑證的註冊群組等等。
服務會套用其所找到的第一個項目,例如:
- 如果找到的第一個註冊項目已啟用,則服務會佈建裝置。
- 如果找到的第一個註冊項目已停用,則服務不會佈建裝置。
- 如果在裝置憑證鏈結中找不到任何憑證的註冊項目,則服務不會佈建裝置。
裝置憑證鏈結中的每個憑證都可以在註冊專案中指定,但只能在 DPS 實例的一個專案中指定。
此機制和憑證鏈結的階層式結構提供強大的彈性,讓您如何控制個別裝置和裝置群組的存取。 例如,假設有五個裝置具有下列憑證鏈結:
- 裝置 1:根憑證 -> 憑證 A -> 裝置 1 憑證
- 裝置 2:根憑證 -> 憑證 A -> 裝置 2 憑證
- 裝置 3:根憑證 -> 憑證 A -> 裝置 3 憑證
- 裝置 4:根憑證 -> 憑證 B -> 裝置 4 憑證
- 裝置 5:根憑證 -> 憑證 B -> 裝置 5 憑證
一開始,您可以為根憑證建立單一啟用的群組註冊項目,以啟用所有五個裝置的存取權。 如果憑證 B 稍後洩露,您可以為憑證 B 建立已停用註冊群組項目,以防止裝置 4 和裝置 5 註冊。 如果稍後裝置 3 也遭到入侵,您可以針對其憑證建立已停用個別註冊項目。 這樣會撤銷裝置 3 的存取權,但是仍然允許裝置 1 和裝置 2 註冊。