Share via


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

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

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

IoT 中樞 的伺服器 TLS 憑證

在 TLS 交握期間,IoT 中樞 向連線用戶端呈現 RSA 金鑰的伺服器憑證。過去,這些憑證全都來自巴爾的摩網路信任根 CA。 由於巴爾的摩根位於生命周期結束時,我們正在移轉至名為 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中樞顯示。

    Screenshot showing how to turn on TLS 1.2 enforcement during IoT hub creation

若要使用 ARM 範本建立,請在任何支援的區域中布建新的 IoT 中樞,並在資源規格中將 屬性設定minTlsVersion1.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 版連線的裝置和服務用戶端。 同樣地,如果訊息未列出任何建議的加密ClientHelloTLS 交握將會遭到拒絕。

注意

屬性minTlsVersion是只讀的,一旦建立 IoT 中樞 資源,就無法變更。 因此,您必須正確測試並驗證 所有 IoT裝置和服務是否與TLS 1.2相容,以及 事先建議的加密

故障轉移時,minTlsVersionIoT 中樞 的 屬性在故障轉移後仍會在異地配對區域中保持有效。

加密套件

設定為只接受 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/01 淘汰,不再用於 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 裝置可以設定為在與 IoT 中樞 通訊時使用 TLS 1.2。 為此,請使用 IoT Edge檔頁面

裝置驗證

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

相互 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 中樞 拒絕連線

憑證釘選

強烈建議 Microsoft 很少或沒有通知地捲動這些憑證,因此強烈建議您不要對 TLS 伺服器證書(也稱為分葉憑證)和與 IoT 中樞 端點相關聯的中繼憑證進行憑證釘選和篩選。 如果您必須,請只釘選跟證書,如此 Azure IoT 部落格文章中所述。

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

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

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

尚未提供此公開預覽功能的正式 SDK 支援。 若要開始使用

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

下一步