分享方式:


IoT 中樞的傳輸層安全性 (TLS) 支援

IoT 中樞使用傳輸層安全性 (TLS) 來保護 IoT 裝置和服務的連線。 目前支援三種 TLS 通訊協定版本,亦即 1.0、1.1 和 1.2 版。

TLS 1.0 和 1.1 被視為舊版,並已規劃淘汰。 如需詳細資訊,請參閱 IoT 中樞即將淘汰 TLS 1.0 和 1.1。 若要避免未來發生問題,請在連線到 IoT 中樞時,使用 TLS 1.2 作為唯一的 TLS 版本。

IoT 中樞的伺服器 TLS 憑證

在 TLS 交握期間,IoT 中樞會向連線用戶端呈現 RSA 金鑰的伺服器憑證。過去,這些憑證全都源自 Baltimore Cybertrust 根 CA。 由於 Baltimore 根目錄的有效期限即將結束,因此,我們正處於移轉至新根目錄 (稱為 DigiCert Global G2) 的過程中。 此移轉會影響目前連線到 IoT 中樞的所有裝置。 如需詳細資訊,請參閱 IoT TLS 憑證更新 (英文)。

雖然根 CA 移轉很少見,但若要在新式安全性環境中進行復原,您應該要為不太可能發生根 CA 遭到入侵或需要進行緊急根 CA 移轉的情況準備 IoT 案例。 強烈建議讓所有裝置都信任下列這三個根 CA:

  • Baltimore CyberTrust 根 CA
  • DigiCert Global G2 根 CA
  • Microsoft RSA 根 CA 2017

如需下載這些憑證的連結,請參閱 Azure 憑證授權單位詳細資料

橢圓曲線加密 (ECC) 伺服器 TLS 憑證 (預覽)

IoT 中樞 ECC 伺服器 TLS 憑證可用於公開預覽。 雖然提供的安全性與 RSA 憑證類似,但 ECC 憑證驗證 (使用僅限 ECC 加密套件) 最多使用 40% 的計算、記憶體和頻寬。 這些節省下來的資源對於 IoT 裝置而言非常重要,因為這些裝置的設定檔和記憶體都比較小,而且還可以支援網路頻寬有限環境中的使用案例。

強烈建議讓使用 ECC 的所有裝置都信任下列這兩個根 CA:

  • DigiCert Global G3 根 CA
  • Microsoft RSA 根 CA 2017

如需下載這些憑證的連結,請參閱 Azure 憑證授權單位詳細資料

若要預覽 IoT 中樞的 ECC 伺服器憑證:

  1. 啟用預覽模式建立新 IoT 中樞
  2. 設定您的用戶端包含 ECDSA 加密套件並排除任何 RSA 加密套件。 以下是 ECC 憑證公開預覽版支援的加密套件:
    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  3. 將用戶端連線至預覽 IoT 中樞。

可在選取區域中使用 TLS 1.2 強制執行

為提高安全性,請將 IoT 中樞設定為允許使用 TLS 1.2 版的用戶端連線,並強制使用加密套件。 只有這些區域支援此功能:

  • 美國東部
  • 美國中南部
  • 美國西部 2
  • US Gov 亞利桑那州
  • US Gov 維吉尼亞州 (此區域無法使用 TLS 1.0/1.1 支援 - 必須啟用 TLS 1.2 強制執行,否則會發生 IoT 中樞建立失敗)

若要啟用 TLS 1.2 強制執行,請遵循在 Azure 入口網站中建立 IoT 中樞中的步驟,但下列情況除外

  • 從上述清單中選擇其中一個區域

  • 在 [管理 -> 進階 -> 傳輸層安全性 (TLS) -> 最低 TLS 版本] 下方,選取 [1.2]。 只有在支援的區域中建立的 IoT 中樞才會顯示此設定。

    顯示如何在建立 IoT 中心期間開啟強制執行 TLS 1.2 的螢幕擷取畫面

若要使用 ARM 範本建立,請在任何支援的區域中佈建新的 IoT 中樞,並在資源規格中將 minTlsVersion 屬性設定為 1.2

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Devices/IotHubs",
            "apiVersion": "2020-01-01",
            "name": "<provide-a-valid-resource-name>",
            "location": "<any-of-supported-regions-below>",
            "properties": {
                "minTlsVersion": "1.2"
            },
            "sku": {
                "name": "<your-hubs-SKU-name>",
                "tier": "<your-hubs-SKU-tier>",
                "capacity": 1
            }
        }
    ]
}

使用此設定建立的 IoT 中樞資源將會拒絕嘗試使用 TLS 1.0 和 1.1 版連線的裝置和服務用戶端。 同樣地,如果 ClientHello 訊息沒有列出任何建議的加密,則會拒絕 TLS 交握。

注意

minTlsVersion 屬性是唯讀的,且無法在建立 IoT 中樞資源之後變更。 因此,您必須事先適當地測試並驗證「所有」IoT 裝置和服務都符合 TLS 1.2 和建議的加密規範。

容錯移轉之後,您 IoT 中樞的 minTlsVersion 屬性會在容錯移轉後的異地配對區域中維持有效。

加密套件

設定為只接受 TLS 1.2 的 IoT 中樞也會強制使用下列建議的加密套件:

  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

對於未設定 TLS 1.2 強制執行的 IoT 中樞,仍可使用 TLS 1.2 搭配下列加密套件:

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_GCM_SHA384
  • TLS_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA256
  • TLS_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA(此加密將於 2022 年 10 月 1 日淘汰,不再用於 TLS 交握)

用戶端可以建議較高階的加密套件清單,以便在 ClientHello 期間使用。 但 IoT 中樞可能並不支援其中部分套件 (例如,ECDHE-ECDSA-AES256-GCM-SHA384)。 在此情況下,IoT 中樞會嘗試遵循用戶端的喜好設定,但最終會與 ServerHello 交涉加密套件。

SDK 和 IoT Edge 的 TLS 設定

使用下列連結,在 IoT 中樞用戶端 SDK 中設定 TLS 1.2 和允許的加密。

語言 支援 TLS 1.2 的版本 文件
C 標記 2019-12-11 或更新版本 連結
Python 2.0.0 版或更新版本 連結
C# 1.21.4 版或更新版本 連結
Java 1.19.0 版或更新版本 連結
NodeJS 1.12.2 版或更新版本 連結

您可將 IoT Edge 裝置設定為使用 TLS 1.2 來與 IoT 中樞通訊。 基於此目的,請使用 IoT Edge 文件頁面

裝置驗證

TLS 交握成功之後,IoT 中樞就可以使用對稱金鑰或 X.509 憑證來驗證裝置。 對於憑證型驗證,可以使用任何 X.509 憑證,包括 ECC。 IoT 中樞會根據您提供的指紋或憑證授權單位 (CA) 來驗證憑證。 若要深入了解,請參閱支援的 X.509 CA 憑證

相互 TLS 支援

相互 TLS 驗證可確保用戶端會「驗證」伺服器 (IoT 中樞) 憑證,且伺服器 (IoT 中樞) 會「驗證」X.509 用戶端憑證或 X.509 指紋。 IoT 中樞會在「驗證」完成之後執行「授權」

針對 AMQP 和 MQTT 通訊協定,IoT 中樞會在初始 TLS 交握中要求用戶端憑證。 如已提供,IoT 中樞就會「驗證」用戶端憑證,而用戶端會「驗證」IoT 中樞憑證。 此流程稱為相互 TLS 驗證。 當 IoT 中樞收到 MQTT 連線封包或 AMQP 連結開啟時,IoT 中樞就會針對要求用戶端執行「授權」,並判斷用戶端是否需要 X.509 驗證。 如果相互 TLS 驗證完成,且用戶端已獲授權來以裝置身分連線,即已允許。 不過,如果用戶端要求 X.509 驗證,且未在 TLS 交握期間完成用戶端驗證,則 IoT 中樞會拒絕連線。

針對 HTTP 通訊協定,當用戶端提出第一個要求時,IoT 中樞會檢查該用戶端是否要求 X.509 驗證,以及用戶端驗證是否完成,接著,IoT 中樞會執行授權。 如果用戶端驗證並未完成,則 IoT 中樞會拒絕連線

憑證釘選

強烈不建議使用憑證關聯和 TLS 伺服器憑證 (分葉憑證) 篩選,以及與 IoT 中樞端點相關聯的中繼憑證,因為 Microsoft 會經常推出這些憑證但可能不會另行通知。 若您必須使用,請僅與根憑證建立關聯,如 Azure IoT 部落格文章中所述。

TLS 最大片段長度交涉 (預覽)

IoT 中樞也支援 TLS 最大片段長度交涉,有時這稱為 TLS 框架大小交涉。 此功能處於公開預覽狀態。

使用這項功能,將純文字片段長度上限指定為小於預設 2^14 個位元組的值。 交涉之後,IoT 中樞和用戶端就會開始將訊息分段,以確保所有片段都小於交涉的長度。 此行為對於有計算或記憶體限制的裝置,很有幫助。 若要深入了解,請參閱官方 TLS 延伸模組規格

目前尚未提供這個公開預覽功能的官方 SDK 支援。 開始使用

  1. 啟用預覽模式建立新 IoT 中樞
  2. 使用 OpenSSL 時,請呼叫 SSL_CTX_set_tlsext_max_fragment_length 以指定片段大小。
  3. 將用戶端連線至預覽 IoT 中樞。

下一步