分享方式:


將下游裝置連線到 Azure IoT Edge 閘道

適用於: IoT Edge 1.5 核取記號 IoT Edge 1.5 IoT Edge 1.4 核取記號 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 Edge 透明閘道之間建立信任連接的指示。 在透明閘道案例中,一或多部裝置可以透過與 IoT 中樞保持連線的單一閘道裝置傳遞訊息。 此處提及的閘道IoT Edge 閘道是指設定為透明閘道的 IoT Edge 裝置。

注意

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

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

  1. 將閘道裝置設定為伺服器,讓下游裝置可以安全地與其連線。 設定閘道以接收來自下游裝置的訊息,並路由傳送至適當的目的地。 關於這些步驟,請參閱設定 IoT Edge 裝置作為透明閘道

  2. 建立下游裝置的裝置身分識別,以便透過 IoT 中樞進行驗證。 將下游裝置設定為透過閘道裝置傳送訊息。 如需這些步驟的說明,請參閱向 Azure IoT 中樞驗證下游裝置

  3. 將下游裝置連線到閘道裝置並開始傳送訊息。

本文可協助您了解下游裝置的連線元件,例如:

  • 傳輸層安全性 (TLS) 和憑證的基本概念。
  • 跨不同作業系統運作的 TLS 程式庫以不同的方式處理憑證。

接著您會逐步執行 Azure IoT 範例,使用您慣用的語言,讓裝置將訊息傳送至閘道。

必要條件

請取得下列項目以備妥您的下游裝置:

  • 下游裝置。

    此下游裝置可以是使用 Azure IoT 中樞雲端服務建立身分識別的任何應用程式或平台。 在許多情況下,這些應用程式都會使用 Azure IoT 裝置 SDK。 下游裝置也可以是在 IoT Edge 閘道裝置自身上執行的應用程式。

    本文稍後會提供將 IoT 裝置連線為下游裝置的步驟。 如果您偏好使用 IoT Edge 裝置作為下游裝置,請參閱將 Azure IoT Edge 裝置連線在一起以建立階層 (巢狀邊緣)

  • 根 CA 憑證檔案。

    設定 IoT Edge 裝置作為透明閘道一文中,此檔案用來產生可在下游裝置上使用的裝置 CA 憑證。

    下游裝置會使用此憑證來驗證閘道裝置的身分識別。 此信任的憑證會驗證閘道裝置的傳輸層安全性 (TLS) 連線。 請參閱提供根 CA 憑證一節中的使用方式詳細資訊。

  • 已修改的連接字串,指向閘道裝置。

    在 Azure IoT 中樞中驗證下游裝置一文中已說明如何修改連接字串。

注意

已向 IoT 中樞註冊的 IoT 裝置可以使用模組對應項,在單一裝置上隔離不同的流程、硬體或功能。 IoT Edge 閘道支援下游模組的連線,使用對稱金鑰驗證,而非 X.509 憑證驗證。

了解 TLS 和憑證的基本概念

安全地將下游裝置連線到 IoT Edge 的挑戰,如同網際網路上發生的其他任何安全用戶端/伺服器通訊。 用戶端和伺服器會透過網際網路,使用傳輸層安全性 (TLS) 安全地進行通訊。 TLS 是使用標準公開金鑰基礎結構 (PKI) 建構 (稱為憑證) 建置的。 TLS 是相當複雜的規格,而且可以處理與保護兩個端點安全相關的各種主題。 本節會摘要說明將裝置安全地連線到 IoT Edge 閘道的相關概念。

當用戶端連線到伺服器時,伺服器會顯示一連串的憑證,稱為伺服器憑證鏈結。 憑證鏈結通常會包含根憑證授權單位 (CA) 憑證、一個或多個中繼 CA 憑證,以及最後的伺服器憑證本身。 用戶端會以密碼編譯方式驗證整個伺服器憑證鏈結,藉此建立與伺服器的信任。 這種伺服器憑證鏈結的用戶端驗證稱為「伺服器鏈結驗證」。 用戶端會挑戰服務,使用稱為「擁有權證明」的流程證明擁有與伺服器憑證相關聯的私密金鑰。 伺服器鏈結驗證和擁有權證明的組合稱為「伺服器驗證」。 若要驗證伺服器憑證鏈結,用戶端需要一份用來建立 (或核發) 伺服器憑證的根 CA 憑證。 一般而言,當連線至網站時,瀏覽器已預先設定常用的 CA 憑證,讓用戶端的程序順暢進行。

當裝置連線到 Azure IoT 中樞時,該裝置就是用戶端,而 IoT 中樞雲端服務則是伺服器。 IoT 中樞雲端服務是以稱為 Baltimore CyberTrust Root 的根 CA 憑證作為後盾,這是公開可用且最廣泛使用的憑證。 大多數裝置上已安裝 IoT 中樞 CA 憑證,因此許多 TLS 實作 (OpenSSL、Schannel、LibreSSL) 會自動在伺服器憑證驗證期間使用該憑證。 不過,成功連線到 IoT 中樞的裝置在嘗試連線到 IoT Edge 閘道時可能會發生問題。

當裝置連線到 IoT Edge 閘道時,下游裝置就是用戶端,而閘道裝置則是伺服器。 但是,Azure IoT Edge 可讓您建置他們認為合適的閘道憑證鏈結。 您可以選擇使用公用 CA 憑證 (例如 Baltimore),或使用自我簽署 (或內部) 的根 CA 憑證。 公用 CA 憑證通常會有與其相關聯的成本,因此通常用於實際執行案例中。 自我簽署的 CA 憑證慣用於開發和測試。 示範憑證是自我簽署的根 CA 憑證。

當您將自我簽署的根 CA 憑證用於 IoT Edge 閘道時,它必須安裝在或提供給嘗試連線到閘道的所有下游裝置。

閘道憑證設定的螢幕擷取畫面。

若要深入了解 IoT Edge 憑證以及一些實際執行的影響,請參閱 IoT Edge 憑證使用方式詳細資料

提供根 CA 憑證

若要驗證閘道裝置的憑證,下游裝置需要自己的根 CA 憑證複本。 如果使用 IoT Edge git 存放庫所提供的指令碼建立測試憑證,則根 CA 憑證稱為 azure-iot-test-only.root.ca.cert.pem

如果您還沒有,請將此憑證檔案移至下游裝置上的任何目錄。 您可以透過以下其中一種方式移動檔案:將 CA 憑證安裝在作業系統憑證存放區,或是 (適用於特定語言) 使用 Azure IoT SDK 參考應用程式內部的憑證。

您可使用如 Azure Key Vault 的服務或類似安全複製通訊協定等功能來移動憑證檔案。

安裝 OS 的憑證

一旦根 CA 憑證位於下游裝置上,請確定連線至閘道的應用程式可以存取憑證。

安裝作業系統憑證存放區中的根 CA 憑證通常可讓大部分的應用程式使用根 CA 憑證。 但有一些例外,例如 NodeJS 應用程式就不使用作業系統憑證存放區,而是使用節點執行階段的內部憑證存放區。 如果您無法在作業系統層級安裝憑證,請直接跳至搭配 Azure IoT SDK 使用憑證

在 Ubuntu 或 Windows 上安裝根 CA 憑證。

下列命令是如何在 Ubuntu 主機上安裝 CA 憑證的範例。 此範例假設您將使用先決條件相關文章中的 azure-iot-test-only.root.ca.cert.pem 憑證,而且您已經將憑證複製到下游裝置的位置。

sudo cp <file path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates

您應該會看到一則訊息,指出「正在更新 /etc/ssl/certs 中的憑證...已新增 1 個憑證,已移除 0 個憑證;完成。」

使用具有 Azure IoT SDK 的憑證

使用簡單的範例應用程式,將 Azure IoT SDK 連線至 IoT Edge 裝置。 此範例的目標是將裝置用戶端連線至閘道並將遙測訊息傳送至閘道,然後關閉連線並結束。

使用應用程式層級的範例之前,請取得下列項目:

  • 下游裝置的 IoT 中樞連接字串,已修改為指向閘道裝置。

  • 向 IoT 中樞驗證下游裝置所需的任何憑證。 如需詳細資訊,請參閱向 Azure IoT 中樞驗證下游裝置

  • 您複製並儲存在下游裝置上某個位置之根 CA 憑證的完整路徑。

    例如: <file path>/azure-iot-test-only.root.ca.cert.pem

現在您已準備好以您選擇的語言搭配範例使用憑證:

本節提供將 Azure IoT NodeJS 裝置用戶端連線到 IoT Edge 閘道的範例應用程式。 針對 NodeJS 應用程式,您必須在應用程式層級安裝根 CA 憑證,如這裡所示。 NodeJS 應用程式不會使用系統的憑證存放區。

  1. 適用於 Node.js 的 Azure IoT 裝置 SDK 範例存放庫取得 edge_downstream_device.js 的範例。
  2. 請檢閱 readme.md 檔案,以確定您擁有執行此範例的所有先決條件。
  3. 在 edge_downstream_device.js 檔案中,更新 connectionStringedge_ca_cert_path 變數。
  4. 如需如何在裝置上執行此範例的指示,請參閱 SDK 文件。

若要了解您正在執行的範例,下列程式碼片段是用戶端 SDK 讀取憑證檔案,並將其用於建立安全 TLS 連線的方式:

// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
    ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};

測試閘道連線

在下游裝置上使用這個範例命令,來測試其是否可以連線到閘道裝置:

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

此命令透過 MQTTS (連接埠 8883) 測試連線。 如果您使用不同的通訊協定,請視需要調整 AMQPS (5671) 或 HTTPS (443) 的命令。

此命令的輸出可能很長,包括鏈結中所有憑證的相關資訊。 如果您的連線成功,您會看到類似 Verification: OKVerify return code: 0 (ok) 的指令行。

如何驗證閘道連線的螢幕擷取畫面。

針對閘道連線進行疑難排解

如果您的下游裝置與其閘道裝置的連線不穩定,請考慮下列問題來解決問題。

  • 連接字串中的閘道主機名稱是否與閘道裝置上 IoT Edge 設定檔中的主機名稱值相同?
  • 閘道主機名稱是否可解析為 IP 位址? 您可以使用 DNS 或在下游裝置上新增主機檔案項目來解決間歇性連線。
  • 通訊連接埠是否在您的防火牆中開啟? 以所使用通訊協定 (MQTTS:8883/AMQPS:5671/HTTPS:433) 為基礎的通訊,必須可在下游裝置與透明IoT Edge之間進行。

下一步

了解 IoT Edge 如何將離線功能擴充到下游裝置。