使用 X.509 憑證驗證身分識別
IoT 中樞會使用 X.509 憑證來驗證裝置。 X.509 驗證允許在傳輸層安全性 (TLS) 標準連線建立中驗證 IoT 裝置。
X.509 CA 憑證是數位憑證,可以簽署其他憑證。 如果某個數位憑證符合 IETF RFC 5280 標準所規定的憑證格式化標準,即會被視為 X.509 憑證。 憑證授權單位 (CA) 則表示其持有人可以簽署其他憑證。
本文說明如何使用 X.509 憑證授權單位 (CA) 憑證來驗證連線到 IoT 中樞的裝置,包含下列步驟:
- 如何取得 X.509 CA 憑證
- 如何向 IoT 中樞註冊 X.509 CA 憑證
- 如何使用 X.509 CA 憑證來簽署裝置
- 以 X.509 CA 簽署之裝置的驗證方式為何
重要
在使用 X.509 憑證授權單位 (CA) 驗證的裝置上,下列功能尚未正式推出,務必啟用預覽模式:
- HTTPS、透過 WebSocket 的 MQTT,以及透過 WebSocket 的 AMQP 通訊協定。
- 檔案上傳 (所有通訊協定)。
這些功能已在使用 X.509 指紋驗證的裝置上正式推出。 若要深入了解使用 IoT 中樞的 X.509 驗證,請參閱支援的 X.509 憑證。
X.509 CA 功能可讓您使用憑證授權單位 (CA) 向 IoT 中樞進行裝置驗證。 這簡化了初始裝置註冊程序,以及裝置製造期間的供應鏈物流。
驗證和授權
驗證是證明您確實是您本人的程序。 驗證會向 Azure IoT 中樞確認使用者或裝置的身分識別。 有時會簡稱為 AuthN (驗證)。 授權是在 Azure IoT 中樞上確認已驗證使用者或裝置權限的流程。 授權指定您可以存取哪些資源和命令,以及您可以使用這些資源和命令執行的動作。 授權 (Authorization) 有時會被簡稱為 AuthZ。
本文說明如何使用 X.509 憑證進行驗證。 您可以將憑證指紋或憑證授權單位 (CA) 上傳到 Azure IoT 中樞,以使用任何的 X.509 憑證來向 IoT 中樞驗證裝置。
X.509 憑證用於 IoT 中樞的驗證,而不是授權。 與 Microsoft Entra ID 和共用存取簽章不同,您無法使用 X.509 憑證自訂權限。
強制執行 X.509 驗證
為了獲得額外的安全性,IoT 中樞可以設定為不允許裝置和模組的 SAS 驗證,並將 X.509 保留為唯一接受的驗證選項。 目前,此功能無法在 Azure 入口網站中使用。 若要設定,請將 IoT 中樞資源屬性上的 disableDeviceSAS
和 disableModuleSAS
設定為 true
:
az resource update -n <iothubName> -g <resourceGroupName> --resource-type Microsoft.Devices/IotHubs --set properties.disableDeviceSAS=true properties.disableModuleSAS=true
X.509 CA 憑證驗證的優點
X.509 憑證授權單位 (CA) 驗證方法可用來對 IoT 中樞驗證裝置,其使用的方法可大幅簡化供應鏈的裝置身分識別建立和生命週期管理工作。
X.509 CA 驗證有一個特殊屬性,那就是 CA 憑證和其下游裝置具有一對多關聯性。 這個關聯性讓您只須註冊一次 X.509 CA 憑證,就能在 IoT 中樞內註冊任意數目的裝置。 否則您就必須先為每個裝置預先註冊唯一的憑證,裝置才能夠進行連線。 這個一對多關聯性也可以簡化裝置的憑證生命週期管理作業。
X.509 CA 驗證還有一個重要屬性,那就是能夠簡化供應鏈物流。 想要有安全的裝置驗證,就必須讓每個裝置保有唯一的祕密 (例如金鑰) 以作為信任基礎。 在憑證型驗證中,此祕密就是私密金鑰。 典型的裝置製造流程牽涉到多個步驟和保管者。 要在多位保管者之間安全地管理裝置的私密金鑰並維持信任,既不容易且所費不貲。 您不妨使用憑證授權單位來解決此問題,請將每位保管者簽署至以密碼編譯的信任鏈結,而不是將裝置的私密金鑰交付給他們。 每位保管者以其個別的製造流程步驟簽署裝置。 最終,您會因為使用以密碼編譯的信任鏈結,藉由內建責任制度而擁有最佳的供應鏈。
當裝置保護其唯一的私密金鑰時,此程序便會產生最大安全性。 為此,建議您使用能夠在內部產生私密金鑰的硬體安全模組 (HSM)。
Azure IoT 中樞裝置佈建服務 (DPS) 可讓您輕鬆地將裝置群組佈建至中樞。 如需詳細資訊,請參閱教學課程:使用註冊群組佈建多個 x.509 裝置。
取得 X.509 CA 憑證
X.509 CA 憑證位於您每個裝置的憑證鏈結頂端。 您可以購買或建立一個這樣的憑證,視您打算如何使用此憑證而定。
針對實際執行環境,建議您向專業憑證服務提供者購買 X.509 CA 憑證。 購買 CA 憑證的好處在於,有根 CA 作為信任的協力廠商來擔保您裝置的合法性。 如果您的裝置屬於開放式 IoT 網路的一部分,且會與第三方產品或服務互動,請考慮使用此選項。
您也可建立自我簽署的 X.509 CA 憑證以供測試。 如需建立憑證以供測試的詳細資訊,請參閱建立及上傳用於測試的憑證。
注意
不建議針對實際執行環境使用自我簽署憑證。
無論 X.509 CA 憑證取得方式為何,請確保一律會將對應的私密金鑰妥善保密及保護。 此預防措施對於在 X.509 CA 驗證中建立信任來說是必要的。
將裝置簽署至憑證信任鏈結中
X.509 CA 憑證的擁有者可以透過密碼編譯方式簽署中繼 CA,此 CA 可再簽署另一個中繼 CA,依此類推,直到最後一個中繼 CA 藉由簽署裝置憑證來終止此程序為止。 結果會是串聯的憑證鏈結,稱為「憑證信任鏈結」。 這個信任委派相當重要,因為它會建立一個在密碼編譯上多變的保管鏈結,以避免共用簽署金鑰。
裝置憑證 (也稱為分葉憑證) 的一般名稱 (CN) 必須設定為在 Azure IoT 中樞內註冊 IoT 裝置時所使用的裝置識別碼 (CN=deviceId
)。 需要此設定才能進行驗證。
對於使用 X.509 驗證的模組,模組的憑證一般名稱 (CN) 格式必須如 CN=deviceId/moduleId
。
了解如何建立憑證鏈結 (會在簽署裝置時完成)。
向 IoT 中樞註冊 X.509 CA 憑證
向 IoT 中樞註冊 X.509 CA 憑證,並於註冊和連線期間,使用此憑證來驗證您的裝置。 註冊 X.509 CA 憑證是兩個步驟的程序,其中包括上傳憑證檔案,然後建立擁有權證明。
上傳程序需要上傳一個包含您憑證的檔案。 此檔案一律不應包含任何私密金鑰。
證明所有權步驟涉及一個您與「IoT 中樞」之間的密碼編譯查問和回應程序。 由於數位憑證內容是公用的,因而容易遭到竊聽,因此 IoT 中樞必須確認您真的擁有 CA 憑證。 您可以選擇自動或手動驗證所有權。 針對手動驗證,Azure IoT 中樞會產生隨機挑戰,讓您使用 CA 憑證的對應私密金鑰進行簽署。 如果您依照建議來將私密金鑰妥善保密及保護,則只有您知道如何完成此步驟。 在此方法中,私密金鑰的保密性就是信任的來源。 簽署挑戰之後,上傳包含結果的檔案,即可完成此步驟並手動驗證憑證。
了解如何註冊您的 CA 憑證。
驗證以 X.509 CA 憑證簽署的裝置
每個 IoT 中樞都有身分識別登錄,可儲存允許連線至 IoT 中樞的裝置和模組相關資訊。 IoT 中樞的身分識別登錄中必須先有裝置或模組項目,該裝置或模組才可以連線。 裝置或模組是根據儲存在身分識別登錄中的認證,使用 IoT 中樞驗證。
在註冊 X.509 CA 憑證且裝置已簽署至憑證信任鏈結之後,最後一個步驟是在裝置連線時進行裝置驗證。 當以 X.509 CA 簽署的裝置連線時,它會上傳其憑證鏈結來進行驗證。 此鏈結包含所有中繼 CA 和裝置憑證。 有了此資訊,「IoT 中樞」就會以一個有兩步驟的程序來驗證裝置。 「IoT 中樞」會以密碼編譯方式驗證憑證鏈結來了解內部是否一致,然後向裝置發出所有權證明查問。 「IoT 中樞」會在從裝置獲得成功的所有權證明回應時,宣告裝置驗證。 此宣告會假設裝置的私密金鑰已受保護,而只有裝置能夠成功回應這個查問。 建議您在裝置中使用安全晶片 (例如「硬體安全模組」(HSM)) 來保護私密金鑰。
裝置與「IoT 中樞」的成功連線既會完成驗證程序,同時也象徵設定正確。 每次裝置連線時,IoT 中樞便會重新交涉 TLS 工作階段,並驗證裝置的 X.509 憑證。
撤銷裝置憑證
使用憑證式驗證來驗證裝置時,IoT 中樞不會檢查來自憑證授權單位的憑證撤銷清單。 如果您的裝置因為憑證可能遭入侵而無法連線到 IoT 中樞,您應該在身分識別登錄中停用該裝置。 如需詳細資訊,請參閱停用或刪除裝置。
範例案例
Company-X 生產需要專業安裝的 Smart-X-Widget。 Company-X 將製造和安裝外包。 Factory-Y 負責製造 Smart-X-Widget,而 Technician-Z 則負責進行安裝。 Company-X 想要讓 Smart-X-Widget 直接從 Factory-Y 出貨給 Technician-Z 安裝,再將其直接連線到 Company-X 的 IoT 中樞執行個體。 為達成此目標,Company-X 必須完成幾個一次性設定作業,讓 Smart-X-Widget 能夠準備好自動連線。 此端對端案例包含下列步驟:
取得 X.509 CA 憑證
向 IoT 中樞註冊 X.509 CA 憑證
將裝置簽署到憑證信任鏈結
連線裝置
這些步驟會在教學課程:建立和上傳用於測試的憑證中示範。
取得憑證
Company-X 可以向公開的根憑證授權單位購買 X.509 CA 憑證,也可以透過自我簽署程序建立一個 X.509 CA 憑證。 任一選項都需要兩個基本步驟:產生公開/私密金鑰組,以及將公開金鑰簽署到憑證中。
如何完成這些步驟的詳細資訊會隨各服務提供者而不同。
購買憑證
購買 CA 憑證的好處在於,有知名的根 CA 可作為信任的第三方來擔保 IoT 裝置在連線時的合法性。 如果您的裝置會與第三方產品或服務互動,請選擇此選項。
若要購買 X.509 CA 憑證,請選擇根憑證服務提供者。 根 CA 提供者會引導您如何建立公開/私密金鑰組,以及如何為其服務產生憑證簽署要求 (CSR)。 CSR 是向憑證授權單位申請憑證的正式程序。 經過這次的購買,便可獲得用來作為授權單位憑證的憑證。 由於 X.509 憑證非常普遍,此憑證可能已正確格式化為 IETF 的 RFC 5280 標準。
建立自我簽署憑證
建立自我簽署 X.509 CA 憑證的程序與購買程序類似,差別只在於涉及第三方簽署者,例如根憑證授權單位。 在我們的範例中,Company-X 會簽署其授權單位憑證,而非根憑證授權單位。
您可以選擇此選項來進行測試,直到準備好購買授權單位憑證。 如果您的裝置不會連線到 IoT 中樞以外的任何第三方服務,您也可以在生產環境中使用自我簽署的 X.509 CA 憑證。
向 IoT 中樞註冊憑證
Company-X 必須向 IoT 中樞註冊 X.509 CA,以在 Smart-X-Widget 連線時由 IoT 中樞進行驗證。 這個一次性的程序可讓您驗證及管理任意數目的 Smart-X-Widget 裝置。 CA 憑證與裝置憑證之間的一對多關聯性是使用 X.509 CA 驗證方法的主要優點之一。 替代方法是為每個 Smart-X-Widget 裝置上傳個別的憑證指紋,但這會因此增加營運成本。
註冊 X.509 CA 憑證是兩個步驟的程序:上傳憑證,然後提供擁有權證明。
上傳憑證
X.509 CA 憑證上傳程序就只是將 CA 憑證上傳到 IoT 中樞。 IoT 中樞預期憑證是放在檔案中。
不論是哪種情況,憑證檔案都不得包含任何私密金鑰。 控管公開金鑰基礎結構 (PKI) 之標準所提供的最佳做法會要求 Company-X 的私密金鑰只位於 Company-X 內。
證明擁有
和所有數位憑證一樣,X.509 CA 憑證也是容易遭到竊聽的公開資訊。 因此,竊聽者可能會攔截憑證,然後嘗試將它當作自己的憑證來上傳。 在我們的範例中,IoT 中樞必須確定 Company-X 所上傳的 CA 憑證確實屬於 Company-X。 其做法是向 Company-X 查問,讓其透過擁有權證明 (PoP) 流程證明其擁有憑證。
在擁有權證明流程中,IoT 中樞會產生隨機數字以供 Company-X 使用其私密金鑰來簽署。 如果 Company-X 遵循 PKI 最佳做法並保護其私密金鑰,則只有他們能夠正確地回應擁有權證明查問。 在成功回應擁有權證明查問後,IoT 中樞會繼續註冊 X.509 CA 憑證。
成功回應 IoT 中樞所提出的擁有權證明查問後,就能完成 X.509 CA 註冊。
將裝置簽署到憑證信任鏈結
IoT 需要每個連線的裝置都擁有唯一的身分識別。 對於憑證式驗證,這些身分識別會採用憑證形式。 在我們的範例中,憑證式驗證表示每個 Smart-X-Widget 都必須擁有唯一的裝置憑證。
在每個裝置上提供唯一憑證的一種有效但低效率的方法是為 Smart-X-Widget 預先產生憑證,並將對應的私密金鑰交付給供應鏈合作夥伴。 對於 Company-X 來說,就是同時交付給 Factory-Y 和 Technician-Z。 這個方法伴隨著必須克服的挑戰就是確保信任,詳情如下:
不僅必須與供應鏈夥伴共用裝置的私密金鑰,還會忽視絕不共用私密金鑰的 PKI 最佳做法,使得在供應鏈建立信任的成本變得昂貴。 這需要系統 (如用來存放裝置私密金鑰的安全室) 和程序 (如定期的安全性稽核)。 這兩者都會讓供應鏈的成本增加。
對於每個金鑰/裝置組來說,從產生裝置唯一憑證 (及私密金鑰) 的那一刻起到淘汰裝置為止,嚴密計算供應鏈中的裝置並於稍後在部署時加以管理會變成一對一的工作。 如此一來,您就無法以群組方式管理裝置,除非您在程序裡以某種方式明確內建群組的概念。 因此,嚴密的計算和裝置生命週期管理會成為沈重的作業負擔。
X.509 CA 憑證驗證會透過使用憑證鏈結,來提供可應對這些挑戰的卓越解決方案。 憑證鏈結的形成,是由 CA 簽署中繼 CA,中繼 CA 再簽署其他中繼 CA,如此不斷循環,直到最終的中繼 CA 簽署裝置為止。 在我們的範例中,Company-X 會簽署 Factory-Y,Factory-Y 再簽署 Technician-Z,Technician-Z 最終則簽署 Smart-X-Widget。
鏈結中的這一連串憑證呈現出授權單位的交接邏輯。 許多供應鏈都遵循這個交接邏輯,以此讓每個中繼 CA 簽署到鏈結中,並同時接收所有上游的 CA 憑證,而最後一個中繼 CA 則負責最終簽署每個裝置,並將鏈結中的所有授權單位憑證注入到裝置內。 這種遞交方式常見於簽約製造公司底下有工廠階層,並任命其中一家特定工廠來負責製造時。 雖然此階層可能深達數層 (例如,依地理位置/產品類型/生產線分類),但最終只有該家工廠會與裝置互動,然而鏈結卻是從階層的最上層來維護。
替代鏈結可能會由不同的中繼 CA 來與裝置互動,在此情況下,與裝置互動的 CA 會在當下注入憑證鏈結內容。 您也可以使用混合模型,此時只有一些 CA 會與裝置實際互動。
下圖顯示憑證信任鏈結如何在 Smart-X-Widget 範例中結合在一起。
- Company-X 永遠不會與任何 Smart-X-Widget 有實際的互動。 它會簽署 Factory-Y 的中繼 CA 憑證來起始憑證信任鏈結。
- Factory-Y 現在有自己的中繼 CA 憑證和 Company-X 的簽章。 它會將這些項目的複本傳遞至裝置。 它也會使用其中繼 CA 憑證來簽署 Technician-Z 的中繼 CA 憑證和 Smart-X-Widget 裝置憑證。
- Technician-Z 現在有自己的中繼 CA 憑證和 Factory-Y 的簽章。 它會將這些項目的複本傳遞至裝置。 它也會使用其中繼 CA 憑證來簽署 Smart-X-Widget 裝置憑證。
- 每個 Smart-X-Widget 裝置現在都有自己的唯一裝置憑證,以及其與整個供應鏈互動之每個中繼 CA 憑證的公開金鑰和簽章複本。 這些憑證和簽章可以回溯到原始 Company-X 根憑證。
CA 驗證方法會在裝置的製造供應鏈中注入嚴密的責任制度。 由於採用憑證鏈結程序,鏈結中每個成員的動作都會以密碼編譯方式記錄下來並可供驗證。
此程序假設唯一的裝置公開/私密金鑰組是獨立建立,而且私密金鑰在裝置內一律受到保護。 幸運的是,有能夠在內部產生金鑰並保護私密金鑰的安全矽晶片存在,其形式為硬體安全模組 (HSM)。 Company-X 只需要將一個這樣的安全晶片加入到 Smart-X-Widget 的元件用料表即可。
驗證裝置
向 IoT 中樞註冊最上層 CA 憑證,且裝置具有其唯一憑證之後,裝置該如何連線? 藉由將 X.509 CA 憑證註冊到 IoT 中樞一次,數量可能有數百萬台的裝置要如何進行第一次連線並進行驗證? 只要透過我們在前面註冊 X.509 CA 憑證時所遇到的相同憑證上傳和擁有權證明流程即可。
專為進行 X.509 CA 驗證所製造的裝置,會配備唯一的裝置憑證以及從其個別的製造供應鏈所得到的憑證鏈結。 裝置連線 (即使是第一次) 進行時會經歷兩個步驟的程序:憑證鏈結上傳和擁有權證明。
在憑證鏈結上傳期間,裝置會將其唯一憑證及憑證鏈結上傳到 IoT 中樞。 使用預先註冊的 X.509 CA 憑證,IoT 中樞就可以驗證上傳的憑證鏈結具有內部一致性,而且鏈結是源自有效的 X.509 CA 憑證擁有者。 如同 X.509 CA 註冊程序,IoT 中樞也會使用擁有權證明查問/回應程序,來確定鏈結以及裝置憑證屬於將其上傳的裝置。 如果回應成功,IoT 中樞就會接受裝置的確可信,並讓其連線。
在我們的範例中,每個 Smart-X-Widget 都會將其唯一的裝置憑證連同 Factory-Y 和 Technician-Z X.509 CA 憑證上傳,然後再回應 IoT 中樞所提出的擁有權證明查問。
信任基礎仰賴於保護私密金鑰,裝置的私密金鑰也包括在內。 因此,我們必須一再強調用來保護裝置私密金鑰之安全矽晶片 (以硬體安全模組 (HSM) 的形式存在),以及絕不共用任何私密金鑰 (例如,某家工廠將其私密金鑰交付給其他工廠) 之整體最佳做法的重要性。
下一步
利用裝置佈建服務,使用註冊群組佈建多個 X.509 裝置。
若要深入了解組成 X.509 憑證的欄位,請參閱 X.509 憑證。
如果您有根 CA 憑證或附屬 CA 憑證,而且想要將其上傳至 IoT 中樞,您必須確認您擁有該憑證。 如需詳細資訊,請參閱教學課程:建立及上傳用於測試的憑證。