IoT 中樞使用傳輸層安全性 (TLS) 來保護 IoT 裝置和服務的連線。
Note
Azure IoT 中樞將於 2025 年 8 月 31 日,配合 Azure 對 TLS 1.0 和 1.1 淘汰的整體服務公告,終止對 TLS 1.0 和 1.1 的支援。 此外,自 2025 年 8 月 31 日起,IoT 中樞將不再支援弱式加密套件。 現有和新的IoT中樞僅支持建議的強式加密套件。
因此,您必須事先適當地測試並驗證「所有」IoT 裝置和服務都符合 TLS 1.2 和建議的加密規範。 強烈建議使用 最低 TLS 強制功能 作為測試和合規性的機制。
Important
請務必區分 TLS 1.2 支援 和 TLS 1.2 強制執行。 所有IoT中樞都支援TS 1.2,這表示IoT中樞可以使用TLS 1.2通訊協議來處理連線。 另一方面,TLS 1.2 強制執行可確保IoT中樞 只 接受使用TLS 1.2或更高版本的連線。 啟用 TLS 1.2 強制執行時,服務也會強制使用 強式加密套件。
目前,TLS 1.2 強制執行僅在公有雲區域中受支援。
若要瞭解IoT中樞裝置正在執行的TLS版本,請參閱 TLS 1.0和1.1終止支援指南。
相互 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 中樞就可以使用對稱金鑰或 X.509 憑證來驗證裝置。 對於憑證型的驗證,IoT 中樞會根據您提供的指紋或憑證授權單位 (CA) 來驗證憑證。 若要深入了解,請參閱使用 X.509 憑證驗證身分識別。
IoT 中樞的伺服器 TLS 憑證
在 TLS 交握期間,IoT 中樞提供 RSA 金鑰伺服器憑證給連線的用戶端。 全域 Azure 雲端中的所有 IoT 中樞都會使用 DigiCert Global Root G2 所簽發的 TLS 憑證。
強烈建議讓所有裝置都信任下列這三個根 CA:
- DigiCert Global G2 根 CA
- Microsoft RSA 根 CA 2017
如需下載這些憑證的連結,請參閱 Azure 憑證授權單位詳細資料。
根 CA 移轉的情況很少見。 您應始終為您的 IoT 解決方案做好準備,以應對根 CA 遭到入侵且需要緊急進行根 CA 移轉的不太可能發生的事件。
加密套件
從 2025 年 8 月 31 日起,IoT 中樞會強制針對所有現有和新 IoT 中樞使用建議的強式加密套件。 在此日期之前,不支援非建議的(弱式)加密套件。
為了符合安全連線的 Azure 安全策略,IoT 中樞僅支援下列 RSA 和 ECDSA 加密套件:
- 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
- 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
Note
ECDSA 密碼套件僅適用於公有雲區域。
在未達 minTlsVersion: 1.2 的情況下,允許在中樞上使用下列非建議的加密套件直到 2025 年 8 月 31 日:
- 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_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA
用戶端可以建議較高階的加密套件清單,以便在 ClientHello 期間使用。 不過,IoT 中樞可能不支援其中一些,例如 ECDHE-ECDSA-AES256-GCM-SHA384。 在此情況下,IoT 中樞會嘗試遵循用戶端的喜好設定,但最終會與 ServerHello 交涉加密套件。
Note
使用 ECDSA 或 ECDHE 密碼時,用戶端必須在 supported_groups 中提供具有有效群組的 ClientHello 延伸模組。 與客戶端憑證連線時,客戶端必須在其supported_groups延伸區中包含該客戶端憑證所使用的曲線。
將IoT中樞更新為TLS 1.2支援
建立IoT中樞之後, minTlsVersion 就可以使用 Azure 入口網站、CLI 或 SDK 來更新屬性。 如果您需要更新以強制IoT中樞使用TS 1.2和強式加密套件(僅在選取的區域中允許),或設定TLS 1.2支援(在所有區域支援),您可以遵循下列步驟。
若要更新IoT中樞以支援TLS 1.2和/或在 Azure 入口網站中強制使用強加密套件:
在 Azure 入口網站中瀏覽至您現有的 IoT 中樞。
在左側功能表中的 [ 概觀] 索引標籤中,單擊 [基本資訊] 區段中的 [ 最低 TLS 版本] 連結 。
從 [最低 TLS 版本] 側邊視窗中,選取 [1.2 ] 以確保只有支援 TLS 1.2 或更新版本的裝置可以連線。
按一下 [更新]。
Note
您可以在所有公用雲端區域中將 IoT 中樞更新為 TLS 1.2。
強制 IoT 中樞使用 TLS 1.2 和強式加密套件
為了確保您的 IoT 裝置符合 TLS 1.2 和強式加密套件,您可以在 Azure IoT 中樞中使用最低 TLS 強制執行功能來強制執行合規性。
Note
目前此功能僅在公有雲區域可用。
若要在 Azure 入口網站中啟用 TLS 1.2 和強式加密套件:
移至 [Azure 入口網站] 中的 [IoT 中樞建立精靈]。
從支援的區域清單中選擇 區域 。
在 [管理 -> 進階 -> 傳輸層安全性 (TLS) -> 最低 TLS 版本] 下方,選取 [1.2]。 只有在支援的區域中建立的 IoT 中樞才會顯示此設定。
選擇 建立
將您的IoT裝置連線到此IoT中樞。
若要使用 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 交握。
Note
容錯移轉後,您的 IoT 中樞的 minTlsVersion 屬性會在容錯移轉後的異地配對區域中維持有效。
檢查 IoT 中樞裝置的 TLS 版本和加密套件
Azure IoT 中樞提供檢查 TLS 版本、加密套件和其他裝置連線計量的功能,以協助監視 IoT 裝置的安全性。 您可以使用IoT中樞計量或診斷記錄來追蹤TLS版本使用量和其他相關屬性,例如 加密套件。
Note
目前此功能僅在公有雲區域可用。
使用IoT中樞度量檢查TLS版本和加密套件
如果您想要驗證 IoT 中樞的裝置流量是否使用 TLSv1.2 和強式加密套件,您可以檢查 IoT 中樞的計量。 這可讓您依 TLS 版本或加密套件進行篩選,並檢查成功的連線數目。
在 Azure 入口網站中,移至您的 IoT 中樞。
在 [ 監視] 下方的左側功能表中,選取 [ 計量]。
新增指標成功連線數。
選取 [ 新增篩選] 按鈕並選擇適當的屬性、TLS 版本或加密套件、運算符,例如 “=”,以及值,依 TLS 版本或加密套件進行篩選,例如 TLSv1.2。
套用篩選後,您會看到裝置總數,這些裝置是根據篩選的屬性和值成功連接到 IoT 中樞的。
使用 IoT 中樞診斷記錄檢查 TLS 版本和加密套件
Azure IoT 中樞可以提供數種類別的診斷記錄,這些記錄可以使用 Azure 監視器記錄來進行分析。 在連線記錄中,您可以找到IoT中樞裝置的TLS版本和加密套件。
若要檢視這些記錄,請遵循下列步驟:
在 Azure 入口網站中,移至您的 IoT 中樞。
在 [ 監視] 下方的左側功能表中,選取 [診斷設定]。 請確保診斷設定已選擇「連線」。
在 [ 監視] 下方的左側功能表中,選取 [ 記錄]。
輸入下列查詢:
AzureDiagnostics | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS" | where Category == "Connections" | where OperationName == "deviceConnect" | extend props_json = parse_json(properties_s) | project DeviceId = props_json.deviceId, TLSVersion = props_json.tlsVersion查詢結果的範例如下所示:
Note
TLS 版本查詢不適用於使用 HTTPS 連線的裝置。
SDK 和 IoT Edge 的 TLS 設定
使用下列連結,在 IoT 中樞用戶端 SDK 中設定 TLS 1.2 和允許的加密。
| 語言 | 支援 TLS 1.2 的版本 | Documentation |
|---|---|---|
| C | 標記 2019-12-11 或更新版本 | Link |
| Python | 2.0.0 版或更新版本 | Link |
| C# | 1.21.4 版或更新版本 | Link |
| JAVA | 1.19.0 版或更新版本 | Link |
| Node.js | 1.12.2 版或更新版本 | Link |
您可將 IoT Edge 裝置設定為使用 TLS 1.2 來與 IoT 中樞通訊。 基於此目的,請使用 IoT Edge 文件頁面。
橢圓曲線加密 (ECC) 伺服器 TLS 憑證
雖然提供的安全性與 RSA 憑證類似,但 ECC 憑證驗證 (使用僅限 ECC 加密套件) 最多使用 40% 的計算、記憶體和頻寬。 這些節省下來的資源對於 IoT 裝置而言非常重要,因為這些裝置的設定檔和記憶體都比較小,而且還可以支援網路頻寬有限環境中的使用案例。
若要使用 IoT 中樞的 ECC 伺服器憑證:
- 確定所有裝置都信任下列根 CA:
- DigiCert Global G2 根 CA
- Microsoft RSA 根 CA 2017
-
設定您的用戶端,只包含 ECDSA 加密套件並排除任何 RSA 加密套件。 以下是 ECC 憑證支援的加密套件:
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- 將用戶端連線至 IoT 中樞。
Note
目前此功能僅在公有雲區域可用。
TLS 最大片段長度交涉
IoT 中樞也支援 TLS 最大片段長度交涉,有時這稱為 TLS 框架大小交涉。 這項功能處於公開預覽狀態。
使用這項功能,將純文字片段長度上限指定為小於預設 2^14 個位元組的值。 交涉之後,IoT 中樞和用戶端就會開始將訊息分段,以確保所有片段都小於交涉的長度。 此行為對於有計算或記憶體限制的裝置,很有幫助。 若要深入了解,請參閱官方 TLS 延伸模組規格。
目前尚未提供這個公開預覽功能的官方 SDK 支援。 開始使用
- 建立 IoT 中樞。
- 使用 OpenSSL 時,請呼叫 SSL_CTX_set_tlsext_max_fragment_length 以指定片段大小。
- 將用戶端連線至 IoT 中樞。
Note
目前此功能僅在公有雲區域可用。
憑證釘選
強烈不建議使用憑證關聯和 TLS 伺服器憑證的篩選,以及與 IoT 中樞端點相關聯的中繼憑證,因為 Microsoft 會經常推出這些憑證但可能不會另行通知。 若您必須使用,請僅與根憑證建立關聯,如 Azure IoT 部落格文章中所述。
後續步驟
- 若要深入了解 IoT 中樞安全性和存取控制,請參閱控制 IoT 中樞的存取權。
- 若要深入了解如何使用 X509 憑證進行裝置驗證,請參閱使用 X.509 CA 憑證進行裝置驗證