X.509 憑證證明

本文概述使用 X.509 憑證證明布建裝置時所涉及的裝置布建服務 (DPS) 概念。 本文與讓裝置準備好進行部署的所有角色有關。

X.509 憑證可以儲存在硬體安全性模組 HSM 中。

提示

強烈建議您搭配使用 HSM 與裝置,在生產環境中的裝置上安全地儲存祕密,例如 X.509 憑證。

X.509 憑證

使用 X.509 憑證作為證明機制,是調整生產環境規模並簡化裝置佈建的絕佳方式。 X.509 憑證通常會排列在信任的憑證鏈結中,其中鏈結中的每個憑證都是由下一個較高憑證的私密金鑰所簽署,依此類推,並終止於自我簽署根憑證中。 此安排會透過每個中繼 CA,從受信任的根憑證授權單位 (CA) 產生的根憑證建立委派的信任鏈結,到裝置上安裝的終端實體「分葉」憑證。 若要深入瞭解,請參閱 使用 X.509 CA 憑證的裝置驗證。

憑證鏈結通常代表與裝置相關聯的部分邏輯或實體階層。 例如,製造商可能會:

  • 發出自我簽署的根 CA 憑證
  • 使用跟證書為每個處理站產生唯一的中繼 CA 憑證
  • 使用每個工廠的憑證,為工廠中的每個生產線產生唯一的中繼 CA 憑證
  • 最後使用生產線憑證,為生產線上製造的每個裝置產生唯一的裝置(端實體)憑證。

若要深入瞭解,請參閱 IoT產業中 X.509 CA 憑證的概念瞭解。

根憑證

根憑證是自我簽署的 X.509 憑證,代表憑證授權單位 (CA)。 它是憑證鏈結的終端或信任錨點。 根憑證可由組織自行發行,或從根憑證授權單位購買。 若要深入瞭解,請參閱 取得 X.509 CA 憑證。 根憑證也可以稱為根 CA 憑證。

中繼憑證

中繼憑證是 X.509 憑證,該憑證已由根憑證簽署 (或由鏈結中具有根憑證的另一個中繼憑證簽署)。 鏈結中的最後一個中繼憑證會用以簽署分葉憑證。 中繼憑證也可以稱為中繼 CA 憑證。

為什麼中繼憑證很有用?

中繼憑證會以各種方式使用。 例如,中繼憑證可用來依產品線、客戶購買裝置、公司部門或工廠來分組裝置。

假設 Contoso 是一家擁有其公鑰基礎結構 (PKI) 的大型公司,其使用名為 ContosoRootCert 的跟證書。 Contoso 的每個子公司都有自己的中繼憑證,由 ContosoRootCert 簽署。 接著,每個子公司都會使用其中繼憑證來簽署每個裝置的分葉憑證。 在此案例中,Contoso 可以使用 ContosoRootCert 為已驗證憑證的單一 DPS 實例。 他們可以為每個子公司擁有註冊群組。 如此一來,每個個別子公司就不必擔心驗證憑證。

終端實體「分葉」憑證

分葉憑證或終端實體憑證會識別憑證持有者。 其憑證鏈結中有跟證書,以及零個或多個中繼憑證。 分葉憑證不會用來簽署任何其他憑證。 它會唯一識別裝置到佈建服務,有時稱為裝置憑證。 在驗證期間,裝置會使用與此憑證相關聯的私密金鑰來回應來自服務的擁有證明挑戰。

與個別註冊或註冊群組專案搭配使用的分葉憑證,必須將主體通用名稱 (CN) 設定為註冊標識碼。 註冊標識碼會使用 DPS 來識別裝置註冊,而且必須是唯一裝置註冊的 DPS 實例(標識符範圍)。 註冊標識碼是英數位元不區分大小寫的字串,加上特殊字元:'-'、、、'.''_'':' 最後一個字元必須是英數位元或虛線 ('-')。 DPS 支援最多 128 個字元的註冊標識符;不過,X.509 憑證中主體一般名稱的最大長度為 64 個字元。 因此,使用 X.509 憑證時,註冊標識碼限制為 64 個字元。

針對註冊群組,主體通用名稱 (CN) 也會設定向 IoT 中樞 註冊的裝置標識碼。 裝置標識碼會顯示在 註冊群組中已驗證裝置的註冊記錄 中。 針對個別註冊,可以在註冊項目中設定裝置標識碼。 如果未在註冊項目中設定,則會使用主體通用名稱 (CN)。

若要深入瞭解,請參閱 驗證使用 X.509 CA 憑證簽署的裝置。

使用 X.509 憑證控制佈建服務的裝置存取權

布建服務會公開兩種註冊類型,您可以使用 X.509 證明機制來控制裝置存取:

  • 個別註冊 項目會設定為與特定裝置相關聯的裝置憑證。 這些項目可控制特定裝置的註冊。
  • 註冊群組 專案會與特定的中繼或根 CA 憑證相關聯。 這些項目會控制在其憑證鏈結中具有該中繼或根憑證的所有裝置的註冊。

憑證只能在 DPS 實例的一個註冊專案中指定。

相互 TLS 支援

當 DPS 註冊設定為 X.509 證明時,DPS 支援相互 TLS (mTLS)。

DPS 裝置鏈結需求

當裝置嘗試透過 DPS 使用註冊群組進行註冊時,裝置必須將憑證鏈結從分葉憑證傳送到 已驗證的憑證。 否則,驗證將會失敗。

例如,如果只驗證跟證書,並將中繼憑證上傳至註冊群組,裝置應該一路從分葉憑證呈現憑證鏈結到已驗證的跟證書。 此憑證鏈結會包含任何中間的中繼憑證。 如果 DPS 無法周遊憑證鏈結至已驗證的憑證,驗證將會失敗。

例如,請考慮針對裝置使用下列裝置鏈結的公司。

Example device certificate chain

在此範例中,只會驗證跟證書,且 中繼2 憑證會上傳至註冊群組。

Example root verified

如果裝置在布建期間只傳送下列裝置鏈結,驗證將會失敗。 因為 DPS 無法嘗試驗證,因為假設 intermediate1 憑證的有效性

Example failing certificate chain

如果裝置在布建期間傳送完整的裝置鏈結,則 DPS 可以嘗試驗證裝置。

Example device certificate chain

使用憑證的 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 註冊。