向 Azure IoT 中樞驗證下游裝置
適用於: IoT Edge 1.5 IoT Edge 1.4
重要
IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 為支援的版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge。
在透明網路閘道案例中,下游裝置 (有時稱為子裝置) 需要在 IoT 中樞中具有身分識別,如同任何其他裝置。 本文將逐步解說用來向 IoT 中樞驗證下游裝置的選項,然後示範如何宣告閘道連線。
注意
下游裝置會將資料直接發出至網際網路或網路閘道裝置 (已啟用或未啟用 IoT Edge)。 子裝置可以是巢狀拓撲中的下游裝置或閘道裝置。
設定成功的透明閘道連線有三個一般步驟。 本文將涵蓋第二個步驟:
- 將閘道裝置設定為伺服器,讓下游裝置可以安全地與其連線。 設定閘道以接收來自下游裝置的訊息,並路由傳送至適當的目的地。 關於這些步驟,請參閱設定 IoT Edge 裝置作為透明閘道。
- 建立下游裝置的裝置身分識別,以便透過 IoT 中樞進行驗證。 將下游裝置設定為透過閘道裝置傳送訊息。
- 將下游裝置連線到閘道裝置並開始傳送訊息。 關於這些步驟,請參閱將下游裝置連線到 Azure IoT Edge 閘道。
下游裝置可使用下列三種方法的其中一種向 IoT 中樞進行驗證:對稱金鑰 (有時稱為共用存取金鑰)、X.509 自我簽署憑證或 X.509 憑證授權單位 (CA) 簽署憑證。 驗證步驟類似於使用 IoT 中樞設定任何非 IoT 邊緣裝置的步驟,在聲明閘道關係時略有不同。
不支援使用 Azure IoT 中樞裝置佈建服務 (DPS) 自動佈建下游裝置。
必要條件
完成設定 IoT Edge 裝置作為透明閘道中的步驟。
如果您使用 X.509 驗證,則會產生下游裝置的憑證。 您在用於透明閘道發行項的相同根 CA 憑證和產生指令碼的憑證,再次可供使用。
本文在數個位置參考「閘道主機名稱」。 閘道主機名稱是在 IoT Edge 閘道裝置上設定檔的 hostname 參數中宣告。 這會在下游裝置的連接字串中參考。 閘道主機名稱必須可使用下游裝置上的 DNS 或主機檔案項目解析為 IP 位址。
使用 IoT 中樞註冊裝置
選擇您希望下游裝置使用 IoT 中樞進行驗證的方法:
對稱金鑰驗證:IoT 中樞會建立您在下游裝置上所放的金鑰。 當裝置驗證時,IoT 中樞會檢查兩個金鑰是否相符。 您不需要建立其他憑證,即可使用對稱金鑰驗證。
如果您要在開發或測試案例中測試閘道,採用此方法會更快速。
X.509 自我簽署驗證:有時稱為指紋驗證,因為您會從裝置的 X.509 憑證與 IoT 中樞共用指紋。
對於實際執行環境案例中的裝置,建議使用憑證驗證。
X.509 CA 簽署的驗證:將根 CA 憑證上傳至 IoT 中樞。 當裝置呈現其 X.509 憑證以進行驗證時,IoT 中樞會檢查它是否屬於相同根 CA 憑證所簽署的信任鏈結。
對於實際執行環境案例中的裝置,建議使用憑證驗證。
對稱金鑰驗證
對稱金鑰驗證 (或共用存取金鑰驗證) 是向 IoT 中樞進行驗證的最簡單方式。 使用對稱金鑰驗證,base64 編碼金鑰會與 IoT 中樞中的 IoT 裝置識別碼建立關聯。 您會在 IoT 應用程式中包含該金鑰,讓裝置可在連線到 IoT 中樞時呈現該金鑰。
使用 Azure 入口網站、Azure CLI 或適用於 Visual Studio Code 的 IoT 延伸模組,在 IoT 中樞中新增 IoT 裝置。 請記住,下游裝置必須在 IoT 中樞中識別為一般 IoT 裝置,而不是 IoT Edge 裝置。
當建立新的裝置身分識別時,請提供下列資訊:
建立裝置的識別碼。
選取 [對稱金鑰] 作為 [驗證類型]。
選取 [設定父裝置],然後選取此下游裝置連線所要透過的 IoT Edge 閘道裝置。 您永遠可以在之後變更父代。
注意
對於使用對稱金鑰驗證的下游裝置,設定父裝置曾經是其選擇性步驟。 不過,從 IoT Edge 1.1.0 版開始,每個下游裝置都必須指派給父裝置。
您可以將環境變數 AuthenticationMode 設定為 CloudAndScope 值,以將 IoT Edge 中樞設定為回到先前的行為。
您也可使用適用於 Azure CLI 的 IoT 延伸模組來完成相同作業。 下列範例使用 az iot hub device-identity 命令來建立使用對稱金鑰驗證的新 IoT 裝置,並會指派父裝置:
az iot hub device-identity create -n {iothub name} -d {new device ID} --device-scope {deviceScope of parent device}
提示
您可以使用 az iot hub device-identity list --hub-name {iothub name}
列出包括裝置範圍的裝置屬性。
接下來,擷取並修改連接字串,讓裝置知道透過其閘道進行連線。
X.509 自我簽署驗證
針對 X.509 自我簽署驗證 (有時稱為指紋驗證),您必須建立新的憑證以放在下游裝置上。 這些憑證內含會與 IoT 中樞共用以進行驗證的指紋。
使用 CA 憑證,為下游裝置建立兩個裝置憑證 (主要和次要)。
如果沒有憑證授權單位可建立 X.509 憑證,則可使用 IoT Edge 示範憑證指令碼來建立下游裝置憑證。 請遵循建立自我簽署憑證的步驟操作。 請使用針對閘道裝置所產生憑證的相同根 CA 憑證。
如果您建立自己的憑證,請確定裝置憑證的主體名稱已設為您在 Azure IoT 中樞所註冊 IoT 裝置時使用的裝置識別碼。 需要此設定才能進行驗證。
從每個憑證擷取 SHA1 指紋 (在 IoT 中樞介面中稱為指紋),這是 40 個十六進位字元字串。 使用下列 openssl 命令來檢視憑證並尋找指紋:
Windows:
openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprint
Linux:
openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprint | sed 's/[:]//g'
執行此命令兩次,一次用於主要憑證,一次用於次要憑證。 當使用 X.509 自我簽署憑證來註冊新的 IoT 裝置時,您會為這兩個憑證提供指紋。
在 Azure 入口網站中巡覽至 IoT 中樞,然後使用下列值建立新的 IoT 裝置身分識別:
- 提供符合裝置憑證主體名稱的 [裝置識別碼]。
- 選取 [X.509 自我簽署] 作為 [驗證類型]。
- 貼上從裝置的主要和次要憑證所複製十六進位字串。
- 選取 [設定父裝置],然後選擇此下游裝置連線所要透過的 IoT Edge 閘道裝置。 您永遠可以在之後變更父代。
將主要和次要裝置憑證及其金鑰複製到下游裝置上的任何位置。 此外,也請移動同時產生閘道裝置憑證和下游裝置憑證的共用根 CA 憑證複本。
您可以在與 IoT 中樞連線之下游裝置上的任何應用程式中參考這些憑證檔案。 您可使用如 Azure Key Vault 的服務或類似安全複製通訊協定等功能來移動憑證檔案。
視偏好的語言而定,檢閱如何在 IoT 應用程式中參考 X.509 憑證的範例:
- C#:在 Azure IoT 中樞設定 X.509 安全性
- C:iotedge_downstream_device_sample.c
- Node.js:simple_sample_device_x509.js
- JAVA:SendEventX509.java
- Python:send_message_x509.py
您也可使用適用於 Azure CLI 的 IoT 延伸模組來完成相同裝置建立作業。 下列範例使用 az iot hub device-identity 命令來建立使用 X.509 自我簽署驗證的新 IoT 裝置,並會指派父裝置:
az iot hub device-identity create -n {iothub name} -d {device ID} --device-scope {deviceScope of gateway device} --am x509_thumbprint --ptp {primary thumbprint} --stp {secondary thumbprint}
提示
您可以使用 az iot hub device-identity list --hub-name {iothub name}
列出包括裝置範圍的裝置屬性。
接下來,擷取並修改連接字串,讓裝置知道透過其閘道進行連線。
X.509 CA 簽署驗證
針對 X.509 憑證授權單位 (CA) 簽署驗證,您需要在 IoT 中樞中註冊根 CA 憑證,以用來簽署下游裝置的憑證。 所有使用由根 CA 憑證或其任何中繼憑證所發出憑證的裝置,都可進行驗證。
本節是以 IoT 中樞 X.509 憑證教學課程系列為基礎。 如需此系列簡介,請參閱了解公開金鑰密碼編譯和 X.509 公開金鑰基礎結構。
使用 CA 憑證,為下游裝置建立兩個裝置憑證 (主要和次要)。
如果沒有憑證授權單位可建立 X.509 憑證,則可使用 IoT Edge 示範憑證指令碼來建立下游裝置憑證。 請遵循建立 CA 簽署憑證的步驟操作。 請使用針對閘道裝置所產生憑證的相同根 CA 憑證。
遵循<在您的 Azure IoT 中樞中設定 X.509 安全性>的示範擁有權證明一節的指示。 在該節中,您將執行下列步驟:
上傳根 CA 憑證。 如果使用示範憑證,則根 CA 會是 <路徑>/certs/azure-iot-test-only.root.ca.cert.pem。
確認擁有該根 CA 憑證。
遵循<在您的 Azure IoT 中樞中設定 X.509 安全性>的<在 IoT 中樞內建立裝置>一節的指示。 在該節中,您將執行下列步驟:
新增裝置。 為 [裝置識別碼] 提供小寫名稱,然後選擇 [X.509 CA 簽署] 驗證類型。
設定父裝置。 選取 [設定父裝置],然後選擇將提供 IoT 中樞連線的 IoT Edge 閘道裝置。
為下游裝置建立憑證鏈結。 使用上傳至 IoT 中樞的相同根 CA 憑證來建立此鏈結。 使用在入口網站中為裝置身分識別所提供的相同小寫裝置識別碼。
將裝置憑證和金鑰複製到下游裝置上的任何位置。 此外,也請移動同時產生閘道裝置憑證和下游裝置憑證的共用根 CA 憑證複本。
您可以在與 IoT 中樞連線之下游裝置上的任何應用程式中參考這些檔案。 您可使用如 Azure Key Vault 的服務或類似安全複製通訊協定等功能來移動憑證檔案。
視偏好的語言而定,檢閱如何在 IoT 應用程式中參考 X.509 憑證的範例:
- C#:在 Azure IoT 中樞設定 X.509 安全性
- C:iotedge_downstream_device_sample.c
- Node.js:simple_sample_device_x509.js
- JAVA:SendEventX509.java
- Python:send_message_x509.py
您也可使用適用於 Azure CLI 的 IoT 延伸模組來完成相同裝置建立作業。 下列範例使用 az iot hub device-identity 命令來建立使用 X.509 CA 簽署驗證的新 IoT 裝置,並會指派父裝置:
az iot hub device-identity create -n {iothub name} -d {device ID} --device-scope {deviceScope of gateway device} --am x509_ca
提示
您可以使用 az iot hub device-identity list --hub-name {iothub name}
列出包括裝置範圍的裝置屬性。
接下來,擷取並修改連接字串,讓裝置知道透過其閘道進行連線。
擷取並修改連接字串
在入口網站中建立 IoT 裝置身分識別之後,即可擷取其主要或次要金鑰。 您必須在應用程式用來與 IoT 中樞通訊的連接字串中,包含這兩個金鑰的其中一個。 針對對稱金鑰驗證,IoT 中樞會在裝置詳細資料中提供完整格式的連接字串,以方便使用。 您必須將閘道裝置的額外資訊新增至連接字串。
下游裝置的連接字串需要下列元件:
- 與裝置連線的 IoT 中樞:
Hostname={iothub name}.azure-devices.net
- 向中樞註冊的裝置識別碼:
DeviceID={device ID}
- 無論是對稱金鑰或 X.509 憑證的驗證方法
- 若使用對稱金鑰驗證,請提供主要或次要金鑰:
SharedAccessKey={key}
- 若使用 X.509 憑證驗證,請提供旗標:
x509=true
- 若使用對稱金鑰驗證,請提供主要或次要金鑰:
- 裝置連線所透過的閘道裝置。 提供 IoT Edge 閘道裝置設定檔案中的 hostname 值:
GatewayHostName={gateway hostname}
總之,完整的連接字串如下所示:
HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz;GatewayHostName=myGatewayDevice
或:
HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;x509=true;GatewayHostName=myGatewayDevice
多虧有了父子式關聯性,您可藉由直接呼叫閘道作為連線主機來簡化連接字串。 例如:
HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz
您將在透明閘道系列下一篇文章中使用此修改過的連接字串。
下一步
此時,您已透過 IoT 中樞註冊 IoT Edge 裝置,並將其設定為透明閘道。 您也已透過 IoT 中樞註冊下游裝置,並將其指向其閘道裝置。
接下來,您必須設定下游裝置以信任閘道裝置,並安全地連線到該裝置。 繼續進行透明閘道系列中的下一篇文章:將下游裝置連線到 Azure IoT Edge 閘道。