適用於: IoT Edge 1.5
重要
IoT Edge 1.5 LTS 是 支援的版本。 自 2024 年 11 月 12 日起,IoT Edge 1.4 LTS 已結束生命週期。 如果您是舊版,請參閱更新 IoT Edge。
在透明網關案例中,下游裝置有時稱為子裝置,需要IoT中樞中的身分識別,就像任何其他裝置一樣。 本文說明驗證下游裝置與 IoT 中心的方式,並示範如何宣告網關連接。
注意
下游裝置會將數據直接傳送至因特網或閘道裝置,無論它們是否已啟用IoT Edge。 子裝置可以是巢狀拓撲中的下游裝置或閘道裝置。
設定成功的透明閘道連線有三個一般步驟。 本文將涵蓋第二個步驟:
- 將閘道裝置設定為伺服器,讓下游裝置可以安全地與其連線。 設定閘道以接收來自下游裝置的訊息,並路由傳送至適當的目的地。 關於這些步驟,請參閱設定 IoT Edge 裝置作為透明閘道。
- 建立下游裝置的裝置身分識別,以便透過 IoT 中樞進行驗證。 將下游裝置設定為透過閘道裝置傳送訊息。
- 將下游裝置連線到閘道裝置並開始傳送訊息。 關於這些步驟,請參閱將下游裝置連線到 Azure IoT Edge 閘道。
下游裝置可以使用三種方法之一向IoT中樞進行驗證:對稱密鑰(有時稱為共用存取密鑰)、X.509 自我簽署憑證或 X.509 證書頒發機構單位 (CA) 簽署憑證。 驗證步驟與設定任何非 IoT Edge 裝置於 IoT 中樞的步驟類似,但有小差異,可以用來宣告閘道關聯性。
不支援使用 Azure IoT 中樞裝置布建服務 (DPS) 自動布建下游裝置。
必要條件
完成設定 IoT Edge裝置以作為透明閘道中的步驟。
如果您使用 X.509 驗證,請為您的下游裝置產生憑證。 請確定您有相同的根 CA 憑證,以及您在透明閘道文章中使用的用於產生憑證的腳本。
本文在數個位置參考「閘道主機名稱」。 閘道主機名是在IoT Edge閘道裝置上組態檔的 主機名 參數中設定。 它也會用於下游裝置的連接字串中。 網關主機名稱必須透過 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#: 具有鏈結範例的 x509 裝置憑證
- 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 CA 憑證進行驗證的簡介,請參閱 X.509 CA 憑證驗證的優點。
若要設定下游裝置的 X.509 CA 簽署驗證,請遵循下列步驟:
取得 X.509 CA 憑證,可用來簽署下游裝置的憑證。 如需如何設定 X.509 CA 簽署驗證的範例,請參閱下列 範例案例。
為下游裝置建立憑證鏈結。 若要深入瞭解,請遵循 建立次級 CA 中的步驟。
在 IoT 中樞註冊 X.509 CA 憑證。 若要深入瞭解,請遵循 將次級 CA 憑證註冊到 IoT 中樞中的步驟。
將裝置憑證和金鑰複製到下游裝置。 如需詳細資訊,請參閱 管理 IoT Edge 憑證。
向 IoT Hub 註冊裝置,以使用 X.509 CA 簽署的身份驗證。 如需詳細資訊,請參閱 建立和管理裝置身分識別。
視偏好的語言而定,檢閱如何在 IoT 應用程式中參考 X.509 憑證的範例:
- C#: 具有鏈結範例的 x509 裝置憑證
- C:iotedge_downstream_device_sample.c
- Node.js:simple_sample_device_x509.js
- JAVA:SendEventX509.java
- Python:send_message_x509.py
擷取並修改連接字串
在入口網站中建立IoT裝置身分識別之後,取得其主要或次要密鑰。 將其中一個金鑰新增至應用程式用來與 IoT 中樞通訊的連接字串。 針對對稱金鑰驗證,IoT 中樞會在裝置詳細數據中顯示完整的連接字串。 將閘道裝置資訊新增至連接字串。
下游裝置的連接字串需要下列部分:
- 裝置連線到的IoT中樞:
Hostname=<Iot-Hub-Name>.azure-devices.net
- 向中樞註冊的裝置識別碼:
DeviceID=<Device-ID>
- 驗證方法,對稱密鑰或 X.509 憑證。
- 針對對稱金鑰驗證,請輸入主要或次要金鑰:
SharedAccessKey=<Key>
- 針對 X.509 憑證驗證,請提供旗標:
x509=true
- 針對對稱金鑰驗證,請輸入主要或次要金鑰:
- 裝置所連線的閘道裝置。 從 IoT Edge 閘道裝置的組態檔輸入 主機名稱 值:
GatewayHostName=<Gateway-Hostname>
完整的連接字串看起來像下列範例:
HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz;GatewayHostName=myGatewayDevice
或者,針對 X.509 憑證驗證:
HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;x509=true;GatewayHostName=myGatewayDevice
由於父子關係,您可以直接使用閘道器作為連線主機來簡化連接字串。 例如:
HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz
在透明網關系列的下一篇文章中使用此修改過的連接字串。
下一步
此時,您已向IoT中樞註冊IoT Edge裝置,並將其設定為透明閘道。 您也有一個已向 IoT 中樞註冊的下游裝置,並連接到其閘道器裝置。
接著,設定下游設備,使其信任閘道,並安全地連接。 繼續閱讀透明網關系列的下一篇文章:將下游裝置連線至 Azure IoT Edge 閘道。