Azure IoT 中樞裝置佈建服務 (DPS) 中的 TLS 支援
DPS 使用傳輸層安全性 (TLS) 來保護 IoT 裝置的連線。
DPS 支援的目前 TLS 通訊協定版本如下:
- TLS 1.2
限制連線到最低 TLS 版本
您可以將 DPS 執行個體設定為只允許使用最低 TLS 版本或更新版本的裝置用戶端連線。
重要
目前,DPS 僅支援 TLS 1.2,因此建立 DPS 執行個體時,不需要指定最低 TLS 版本。 這項功能是針對未來的擴充所提供。
若要這樣做,請在 Azure Resource Manager 範本的 DPS 資源規格中,將 minTlsVersion
屬性設定為 1.2
。 下列範例範本 JSON 會指定新 DPS 執行個體的 minTlsVersion
屬性。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Devices/ProvisioningServices",
"apiVersion": "2020-01-01",
"name": "<provide-a-valid-DPS-resource-name>",
"location": "<any-region>",
"properties": {
"minTlsVersion": "1.2"
},
"sku": {
"name": "S1",
"capacity": 1
},
}
]
}
您可以使用下列 Azure CLI 命令來部署範本。
az deployment group create -g <your resource group name> --template-file template.json
如需使用 Resource Manager 範本建立 DPS 資源的詳細資訊,請參閱使用 Azure Resource Manager 範本設定 DPS。
使用此設定建立的 DPS 資源會拒絕嘗試使用 TLS 1.0 和 1.1 版連線的裝置。
注意
minTlsVersion
屬性是唯讀的,且無法在建立 DPS 資源之後進行變更。 因此,您必須事先適當地測試並驗證「所有」IoT 裝置都符合 TLS 1.2 和建議的加密規範。
注意
容錯移轉之後,您 DPS 的 minTlsVersion
屬性會在容錯移轉後的異地配對區域中維持有效。
建議的加密
DPS 執行個體會強制使用下列建議和舊版的加密套件:
建議的 TLS 1.2 加密套件 |
---|
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
舊版加密套件
DPS 仍支援這些加密套件,但將會過時。 可能的話,請使用建議的加密套件。
選項 #1 (更好的安全性) |
---|
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1) TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1) TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) |
選項 #2 (更好的效能) |
---|
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1) TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1) TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy) |
相互 TLS 支援
當 DPS 註冊設定為 X.509 驗證時,DPS 支援相互 TLS (mTLS)。
伺服器 TLS 憑證
在 TLS 交握期間,DPS 會將 RSA 金鑰的伺服器憑證呈現給連線的用戶端。 全域 Azure 雲端中的所有 DPS 實例都會使用 DigiCert Global Root G2 憑證所簽發的 TLS 憑證。
我們也建議將 Microsoft RSA 跟證書授權單位 2017 憑證新增至您的裝置,以避免在 DigiCert Global Root G2 意外淘汰時中斷。 雖然根 CA 移轉很少見,但若要在新式安全性環境中進行復原,您應該要為不太可能發生根 CA 遭到入侵或需要進行緊急根 CA 移轉的情況準備 IoT 案例。
強烈建議所有裝置都信任下列根 CA:
- DigiCert Global G2 根 CA
- Microsoft RSA 根 CA 2017
如需下載這些憑證的連結,請參閱 Azure 憑證授權單位詳細資料。
SDK 中的憑證信任
Azure IoT 裝置 SDK 會將裝置連線並驗證至 Azure IoT 服務。 不同的 SDK 會根據語言和版本以不同的方式管理憑證,但大部分會依賴裝置的受信任證書存儲,而不是直接在程式碼基底中釘選憑證。 此方法提供彈性和復原能力,以處理跟證書的未來變更。
下表摘要說明哪些 SDK 版本支援受信任的證書儲存:
Azure IoT 裝置 SDK | 支援的版本 |
---|---|
C | 所有目前支援的版本 |
C# | 所有目前支援的版本 |
Java | 版本 2.x.x 和更新版本 |
Node.js | 所有目前支援的版本 |
Python | 所有目前支援的版本 |
憑證釘選
不建議使用 TLS 伺服器證書的憑證釘 選和篩選(也稱為分葉憑證)和與 DPS 端點相關聯的中繼憑證,因為Microsoft經常以很少或沒有通知方式擲回這些憑證。 如果您必須,則只釘選跟證書。
在 IoT SDK 中使用 TLS 1.2
使用下列連結,在 Azure 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 版或更新版本 | 連結 |
使用 TLS 1.2 搭配 IoT 中樞
您可將 IoT 中樞設定為使用 TLS 1.2 來與裝置通訊。 如需詳細資訊,請參閱 IoT 中樞即將淘汰 TLS 1.0 和 1.1。
使用 TLS 1.2 搭配 IoT Edge
您可將 IoT Edge 裝置設定為使用 TLS 1.2 來與 IoT 中樞和 DPS 通訊。 如需詳細資訊,請參閱 IoT Edge 文件頁面。