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

適用於:IoT Edge 1.4 複選標記 IoT Edge 1.4

重要

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

在這裡,您會找到建立下游裝置與IoT Edge透明 閘道之間受信任連線的指示。 在透明閘道案例中,一或多部裝置可以透過與 IoT 中樞保持連線的單一閘道裝置傳遞訊息。 在這裡,閘道IoT Edge閘道詞彙是指設定為透明閘道的IoT Edge裝置。

注意

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

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

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

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

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

本文可協助您瞭解下游裝置聯機組件,例如:

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

接著,您會以慣用的語言逐步解說 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 金鑰保存庫 之類的服務,或安全複製通訊協定之類的函式來移動憑證檔案。

安裝 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) 視需要調整命令。

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

如何驗證網關聯機的螢幕快照。

針對網關聯機進行疑難解答

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

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

下一步

瞭解IoT Edge如何將離線功能延伸至下游裝置。