IoT 中樞使用傳輸層安全性 (TLS) 來保護 IoT 裝置和服務的連線。
Note
Azure IoT 中樞 將配合 Azure 全面性服務公告,於 2025 年 8 月 31 日 停止支援 TLS 1.0 和 1.1 淘汰。 此外,自 2025 年 8 月 31 日起,IoT 中樞 不再支援弱密碼套件。 現有與新建物聯網樞紐僅支援推薦的強密碼套件。
務必事先妥善測試並驗證 所有 物聯網裝置與服務是否相容於 TLS 1.2 及 推薦密碼 。 我們建議您使用 最低 TLS 強制執行功能 作為測試與合規機制。
Important
區分 TLS 1.2 支援 與 TLS 1.2 強制執行非常重要。 所有物聯網集線器都支援 TLS 1.2,意即物聯網集線器能處理使用 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 移轉的情況很少見。 務必為您的物聯網解決方案做好準備,以應對根憑證卡被入侵且緊急遷移根憑證卡的罕見情況。
加密套件
從 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 中樞 後,請使用 Azure 入口網站、CLI 或 SDK 更新 minTlsVersion 屬性。 若要更新 IoT 中樞 以強制執行 TLS 1.2 及強密碼套件(僅在特定區域允許),或設定 TLS 1.2 支援(所有區域支援),請依照以下步驟操作。
若要更新IoT中樞以支援TLS 1.2和/或在 Azure 入口網站中強制使用強加密套件:
在 Azure 入口網站中瀏覽至您現有的 IoT 中樞。
在左側選單的 「概覽 」標籤中,從「Essentials」區塊選擇 「最小 TLS 版本 」連結。
從 最低 TLS 版本 側視窗選擇 1.2 ,確保只有支援 TLS 1.2 或更高版本的裝置能連線。
選取 [更新]。
Note
您可以在所有公用雲端區域將 IoT 中樞更新為 TLS 1.2。
強制 IoT 中樞使用 TLS 1.2 和強式加密套件
為確保您的物聯網裝置符合 TLS 1.2 和 高強度密碼套件 的要求,請使用 Azure IoT 中樞中的最低 TLS 強制功能來確保合規。
Note
目前此功能僅在公有雲區域提供。
為了在 Azure 入口中啟用 TLS 1.2 及強密碼套件強制執行:
移至 [Azure 入口網站] 中的 [IoT 中樞建立精靈]。
從支援的區域清單中選擇 區域 。
在 [管理 -> 進階 -> 傳輸層安全性 (TLS) -> 最低 TLS 版本] 下方,選取 [1.2]。 此設定僅會出現在支援區域內建立的物聯網集線器。
選取 ,創建。
將您的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 版本使用情況及其他相關屬性,如 Cipher Suites。
Note
目前此功能僅在公有雲區域提供。
使用 IoT 中樞 指標檢查 TLS 版本和密碼套件
若要驗證裝置與 IoT 中樞 之間的流量是否使用 TLSv1.2 和高強度加密套件,請檢查 IoT 中樞 指標。 你可以依照 TLS 版本或密碼套件篩選,並查看成功連線次數。
在 Azure 入口網站中,移至您的 IoT 中樞。
在 [ 監視] 下方的左側功能表中,選取 [ 計量]。
新增指標成功連線數。
依 TLS 版本或密碼套件篩選,方法是選擇 新增過濾器 按鈕,並選擇適當的屬性、TLS 版本或密碼套件、運算子(如「=」),以及值(如 TLSv1.2)。
套用篩選後,你會看到根據篩選的屬性和數值,成功連接 IoT 中樞 的裝置總和。
使用 IoT 中樞 診斷日誌檢查 TLS 版本與密碼套件
Azure IoT 中樞 可以提供多個類別的診斷日誌,你可以透過 Azure 監視器 Logs 進行分析。 在連線日誌中,你可以找到 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 部落格文章中所述。
TLS 1.3 支援(預覽版)
Azure IoT 中樞 透過新增的裝置與服務端點支援 TLS 1.3,並可搭配現有經典端點。 這些端點會自動配置在所有物聯網樞紐上,並可依照您的步調採用。
Endpoints
| 終點 | Hostname | TLS 支援 |
|---|---|---|
| Classic | <hub>.azure-devices.net |
TLS 1.2 |
| 裝置(預覽) | <hub>.device.azure-devices.net |
TLS 1.2(受限密碼)+ TLS 1.3 |
| 服務(預覽) | <hub>.service.azure-devices.net |
TLS 1.2(受限密碼)+ TLS 1.3 |
經典端點仍獲得完整支援,並持續成為現有工作負載的預設。
Requirements
新端點的要求比經典端點更嚴格:
- 必須使用 SNI。 用戶端必須在 TLS 握手中傳送伺服器名稱指示(SNI)延伸。
- 限制密碼室。 僅支援符合安全規範的密碼套件。 依賴非此組密碼套件的裝置無法連線。 有關支援的密碼套件清單,請參見密碼套件。
- 使用 TLS 1.2 的裝置若 支援所需的密碼套件,即可連接新端點。
使用新的端點
要取得新端點的連接字串,請使用 --hostname-type 參數:
# Device connection string using the TLS 1.3-capable device endpoint
az iot hub device-identity connection-string show \
--hub-name <hub-name> \
--resource-group <resource-group> \
--device-id <device-id> \
--hostname-type device
# Hub connection string using the service endpoint
az iot hub connection-string show \
--hub-name <hub-name> \
--resource-group <resource-group> \
--hostname-type service
若要確認您的中樞中有哪些可用端點:
az iot hub show --name <hub-name> --resource-group <resource-group> \
--query "{classic:properties.hostName, device:properties.deviceHostName}" \
--output json
Note
service主機名稱類型不適用於裝置或模組的連線字串。 用於 device 或 classic 用於裝置端連接。
遷移到 TLS 1.3 端點
採用新端點為可選且由客戶控制。 如需移轉:
- 確認你的裝置和用戶端支援 SNI 及所需的密碼套件。
- 在暫存環境中測試裝置端點的連線性。
- 更新你的裝置連線字串以使用
<hub>.device.azure-devices.net。 - 對於後端服務,請更新連接字串以使用
<hub>.service.azure-devices.net。
若要回復,請更新連線字串,使其使用原本的 <hub>.azure-devices.net 主機名稱。
如果您的物聯網中樞是透過私有端點(Azure Private Link)存取,新的裝置與服務主機名稱也必須解析為虛擬網路中的私有 IP 位址。 大多數情況下這是自動完成的,但靜態 IP 配置或完整子網可能需要手動操作。 請參閱 更新私有端點以啟用 TLS 1.3。
Important
不要用服務端點<hub>.service.azure-devices.net()來連接裝置。 它僅用於後端服務。
關於使用裝置配置服務(DPS)使用新端點的資訊,請參閱 DPS 中的「管理連結物聯網集線」。
後續步驟
- 若要深入了解 IoT 中樞安全性和存取控制,請參閱控制 IoT 中樞的存取權。
- 欲了解更多使用 X509 憑證進行裝置認證的資訊,請參閱使用 X.509 CA 憑證的裝置認證。