IoT 中樞的傳輸層安全性 (TLS) 支援
IoT 中樞使用傳輸層安全性 (TLS) 來保護 IoT 裝置和服務的連線。
注意
Azure IoT 中樞 將結束 TLS 1.0 和 1.1 的支援,以配合 Azure 服務公告的TLS 1.0 和 1.1 於 2025 年 8 月 31 日淘汰。
因此,您必須正確測試並驗證 所有 IoT裝置和服務是否與TLS 1.2相容,以及 事先建議的加密 。 強烈建議使用 最低 TLS 強制功能 作為測試和合規性的機制
若要瞭解您執行 IoT 中樞 裝置的 TLS 版本,請參閱 TLS 1.0 和 1.1 終止支援指南。
相互 TLS 支援
相互 TLS 驗證可確保用戶端會使用 X.509 用戶端憑證或 X.509 指紋來驗證伺服器 (IoT 中樞) 憑證,而伺服器 (IoT 中樞) 會驗證用戶端。 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 CA 憑證。
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移轉的不太可能事件。
加密套件
為了符合安全連線的 Azure 安全策略,IoT 中樞 支援 TLS 1.2 的下列 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
IoT 中樞 中目前允許下列加密套件。 不過,Azure 安全性指導方針已不再建議這些加密套件。
加密套件 | TLS 版本支援 |
---|---|
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | TLS 1.2 |
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | TLS 1.2 |
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_256_GCM_SHA384 | TLS 1.2 |
TLS_RSA_WITH_AES_128_GCM_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA256 | TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
用戶端可以建議較高階的加密套件清單,以便在 ClientHello
期間使用。 但 IoT 中樞可能並不支援其中部分套件 (例如,ECDHE-ECDSA-AES256-GCM-SHA384
)。 在此情況下,IoT 中樞 嘗試遵循用戶端的喜好設定,但最終會與 ServerHello
交涉加密套件。
強制 IoT 中樞 使用 TLS 1.2 和強式加密套件
若要確保您的 IoT 裝置是 TLS 1.2 和強式加密套件合規性,您可以在 Azure IoT 中樞 中使用最低 TLS 強制執行功能來強制執行合規性。
目前這項功能僅適用於下列區域,並在建立 IoT 中樞 期間使用(2025 年將支援其他 Azure 區域):
- 美國東部
- 美國中南部
- 美國西部 2
- US Gov 亞利桑那州
- US Gov 維吉尼亞州 (此區域無法使用 TLS 1.0/1.1 支援 - 必須啟用 TLS 1.2 強制執行,否則會發生 IoT 中樞建立失敗)
若要在 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 交握。
注意
屬性minTlsVersion
是只讀的,一旦建立 IoT 中樞 資源,就無法變更。 因此,您必須正確測試並驗證 所有 IoT裝置和服務是否與TLS 1.2相容,以及 事先建議的加密 。
故障轉移時,minTlsVersion
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
- 查詢結果的範例如下所示:
- 注意:TLS 版本查詢不適用於使用 HTTPS 連線的裝置。
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 文件頁面。
橢圓曲線密碼編譯 (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_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
- 將客戶端連線到IoT中樞。
TLS 片段長度上限交涉
IoT 中樞也支援 TLS 最大片段長度交涉,有時這稱為 TLS 框架大小交涉。 此功能處於公開預覽狀態。
使用這項功能,將純文字片段長度上限指定為小於預設 2^14 個位元組的值。 交涉之後,IoT 中樞和用戶端就會開始將訊息分段,以確保所有片段都小於交涉的長度。 此行為對於有計算或記憶體限制的裝置,很有幫助。 若要深入了解,請參閱官方 TLS 延伸模組規格。
目前尚未提供這個公開預覽功能的官方 SDK 支援。 開始使用
- 建立 IoT 中樞。
- 使用 OpenSSL 時,請呼叫 SSL_CTX_set_tlsext_max_fragment_length 以指定片段大小。
- 將客戶端連線至 IoT 中樞。
憑證釘選
強烈建議您不要Microsoft很少或沒有通知地捲動這些憑證,因此強烈建議您釘選和篩選與 IoT 中樞 端點相關聯的 TLS 伺服器憑證和中繼憑證。 若您必須使用,請僅與根憑證建立關聯,如 Azure IoT 部落格文章中所述。
下一步
- 若要深入了解 IoT 中樞安全性和存取控制,請參閱控制 IoT 中樞的存取權。
- 若要深入了解如何使用 X509 憑證進行裝置驗證,請參閱使用 X.509 CA 憑證進行裝置驗證