你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure IoT 中心设备预配服务 (DPS) 中的 TLS 支持
DPS 使用传输层安全性 (TLS) 保护来自 IoT 设备的连接。
DPS 支持的当前 TLS 协议版本如下:
- TLS 1.2
限制最低 TLS 版本的连接
可将 DPS 实例配置为仅允许使用最低 TLS 版本或更高版本的设备客户端连接。
重要
目前,DPS 仅支持 TLS 1.2,因此在创建 DPS 实例时无需指定最低 TLS 版本。 此功能是为将来的扩展提供的。
为此,请预配一个新的 DPS 资源设置,并在 Azure 资源管理器模板的 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
若要详细了解如何使用资源管理器模板来创建 DPS 资源,请参阅使用 Azure 资源管理器模板设置 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 支持
为 X.509 身份验证配置 DPS 注册时,DPS 支持相互 TLS (mTLS)。
证书固定
强烈建议不要固定证书,也不要筛选 TLS 服务器证书(又名“叶证书”)和与 DPS 终结点关联的中间证书,因为 Microsoft 会经常滚动更新这些证书,但很少或没有通知。 如果必须执行相关操作,请仅按照此 Azure IoT 博客文章中所述固定根证书。
在 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 设备可以配置为在与 IoT 中心和 DPS 通信时使用 TLS 1.2。 有关详细信息,请参阅 IoT Edge 文档页。