向 Azure IoT 中樞驗證下游裝置

適用于: IoT Edge 1.4 checkmark IoT Edge 1.4

重要

支援的版本是 IoT Edge 1.4。 如果您是舊版,請參閱更新 IoT Edge

在透明閘道案例中,下游裝置(有時稱為子裝置)需要像任何其他裝置一樣IoT 中樞身分識別。 本文將逐步解說驗證下游裝置以IoT 中樞的選項,然後示範如何宣告閘道連線。

注意

下游裝置會將資料直接發出至網際網路或閘道裝置(已啟用 IoT Edge 或未啟用 IoT Edge)。 子裝置可以是巢狀拓撲中的下游裝置或閘道裝置。

設定成功的透明閘道連線有三個一般步驟。 本文涵蓋第二個步驟:

  1. 將閘道裝置設定為伺服器,讓下游裝置可以安全地連線到該裝置。 設定閘道以接收來自下游裝置的訊息,並將其路由傳送至適當的目的地。 如需這些步驟,請參閱 設定 IoT Edge 裝置作為透明閘道
  2. 建立下游裝置的裝置身分識別,以便向IoT 中樞進行驗證。 設定下游裝置以透過閘道裝置傳送訊息。
  3. 連線下游裝置到閘道裝置,並開始傳送訊息。 如需這些步驟,請參閱 將下游裝置連線至 Azure IoT Edge 閘道

下游裝置可以使用下列三種方法之一向IoT 中樞進行驗證:對稱金鑰(有時稱為共用存取金鑰)、X.509 自我簽署憑證或 X.509 憑證頒發機構單位 (CA) 簽署憑證。 驗證步驟與使用 IoT 中樞 設定任何非 IoT Edge 裝置的步驟類似,但有小差異來宣告閘道關聯性。

不支援使用 Azure IoT 中樞 裝置布建服務 (DPS) 自動布建下游裝置。

必要條件

完成設定 IoT Edge 裝置以作為透明閘道 中的 步驟。

如果您使用 X.509 驗證,您將會產生下游裝置的憑證。 擁有可供再次使用的透明閘道發行項所使用的相同根 CA 憑證和憑證產生腳本。

本文參考數點的 閘道主機名稱 。 閘道主機名稱是在 IoT Edge 閘道裝置上組態檔的主機名稱 參數中宣告 。 其會在下游裝置的連接字串中參考。 閘道主機名稱必須使用 DNS 或下游裝置上的主機檔案專案,解析為 IP 位址。

向 IoT 中樞 註冊裝置

選擇您希望下游裝置向IoT 中樞進行驗證的方式:

  • 對稱金鑰驗證 :IoT 中樞建立您在下游裝置上放置的金鑰。 當裝置驗證時,IoT 中樞會檢查兩個金鑰是否相符。 您不需要建立其他憑證,即可使用對稱金鑰驗證。

    如果您要在開發或測試案例中測試閘道,這個方法可更快速地開始使用。

  • X.509 自我簽署驗證:有時稱為指紋驗證 ,因為您會與IoT 中樞共用裝置 X.509 憑證的指紋。

    針對生產案例中的裝置,建議使用憑證驗證。

  • 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 閘道裝置。 您稍後一律可以變更父代。

    Screenshot of how to create a device ID with symmetric key authorization in the Azure portal.

    注意

    針對使用對稱金鑰驗證的下游裝置,設定用來作為選擇性步驟的父裝置。 不過,從 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 中樞共用以進行驗證的指紋。

  1. 使用 CA 憑證,為下游裝置建立兩個裝置憑證(主要和次要憑證)。

    如果您沒有憑證授權單位單位可建立 X.509 憑證,您可以使用 IoT Edge 示範憑證腳本來 建立下游裝置憑證 。 請遵循建立自我簽署憑證的步驟。 使用為閘道裝置產生憑證的相同根 CA 憑證。

    如果您建立自己的憑證,請確定裝置憑證的主體名稱已設定為您在Azure IoT 中樞中註冊 IoT 裝置時所使用的裝置識別碼。 驗證需要此設定。

  2. 從每個憑證擷取 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 裝置時,您會為這兩個憑證提供指紋。

  3. 流覽至Azure 入口網站中的 IoT 中樞,並使用下列值建立新的 IoT 裝置身分識別:

    • 提供符合裝置憑證主體名稱的裝置識別碼
    • 選取 [X.509 自我簽署 ] 作為驗證類型。
    • 貼上您從裝置的主要和次要憑證複製的十六進位字串。
    • 選取 [設定父裝置 ],然後選擇此下游裝置將透過連線的 IoT Edge 閘道裝置。 您稍後一律可以變更父代。

    Screenshot that shows how to create a device ID with an X.509 self-signed authorization in the Azure portal.

  4. 將主要和次要裝置憑證及其金鑰複製到下游裝置上的任何位置。 同時移動產生閘道裝置憑證和下游裝置憑證的共用根 CA 憑證複本。

    您將在連線到 IoT 中樞 的下游裝置上,參考這些憑證檔案。 您可以使用 Azure 金鑰保存庫 之類的 服務,或安全複製通訊協定 之類的 函式來移動憑證檔案。

  5. 根據您的慣用語言,檢閱如何在 IoT 應用程式中參考 X.509 憑證的範例:

您也可以使用適用于 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 公開金鑰基礎結構

  1. 使用 CA 憑證,為下游裝置建立兩個裝置憑證(主要和次要憑證)。

    如果您沒有憑證授權單位單位可建立 X.509 憑證,您可以使用 IoT Edge 示範憑證腳本來 建立下游裝置憑證 。 請遵循建立 CA 簽署憑證的步驟。 使用為閘道裝置產生憑證的相同根 CA 憑證。

  2. 遵循在 Azure IoT 中樞 設定 X.509 安全性的 示範擁有 證明一節中的 指示操作。 在該區段中,您會執行下列步驟:

    1. 上傳根 CA 憑證。 如果您使用示範憑證,則根 CA 是 < path > /certs/azure-iot-test-only.root.ca.cert.pem

    2. 確認您擁有該根 CA 憑證。

  3. 請遵循在 Azure IoT 中樞設定 X.509 安全性的 IoT 中樞 一節 中 建立裝置中的指示。 在該區段中,您會執行下列步驟:

    1. 新增裝置。 提供裝置識別碼 小寫名稱,然後選擇驗證類型 X.509 CA 簽署

    2. 設定父裝置。 選取 [設定父裝置 ],然後選擇將提供連線至 IoT 中樞 的 IoT Edge 閘道裝置。

  4. 為您的下游裝置建立憑證鏈結。 使用您上傳至 IoT 中樞 的相同根 CA 憑證來建立此鏈結。 使用您在入口網站中提供給裝置身分識別的相同小寫裝置識別碼。

  5. 將裝置憑證和金鑰複製到下游裝置上的任何位置。 同時移動產生閘道裝置憑證和下游裝置憑證的共用根 CA 憑證複本。

    您將在連線至 IoT 中樞 的下游裝置上的任何應用程式中參考這些檔案。 您可以使用 Azure 金鑰保存庫 之類的 服務,或安全複製通訊協定 之類的 函式來移動憑證檔案。

  6. 根據您的慣用語言,檢閱如何在 IoT 應用程式中參考 X.509 憑證的範例:

您也可以使用適用于 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 閘道裝置組態檔中的主機名稱 值: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 閘道