你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 IoT 中心资源迁移到新的 TLS 证书根

Azure IoT 中心和设备预配服务 (DPS) 使用 Baltimore CyberTrust Root 颁发的 TLS 证书,该证书将于 2025 年到期。 从 2023 年 2 月开始,全球 Azure 云中的所有 IoT 中心都将迁移到 DigiCert Global Root G2 颁发的新 TLS 证书。

现在应该开始规划将 IoT 中心迁移到新的 TLS 证书的影响:

  • 证书存储中没有 DigiCert Global Root G2 的任何设备都无法连接到 Azure。
  • IoT 中心的 IP 地址将发生变化。

时间线

IoT 中心迁移已完成,但已批准扩展的中心除外。 如果发现 IoT 中心在未与产品团队达成协议的情况下使用 Baltimore 证书,则中心将迁移,不会有任何进一步的通知。

在所有 IoT 中心迁移后,DPS 将在 2024 年 1 月 15 日至 9 月 30 日期间执行迁移。

对于每个具有扩展协议的 IoT 中心,可以期待以下事项:

  • 迁移前一到两周:每个 IoT 中心的订阅所有者会收到一封电子邮件通知,告知他们迁移日期。 此通知不适用于手动迁移的中心。
  • 迁移日期:IoT 中心会将其 TLS 证书切换为 DigiCert 全局根 G2,这不会导致 IoT 中心出现故障时间。 IoT 中心不会强制设备重新连接。
  • 迁移后:订阅所有者会收到用于确认 IoT 中心已迁移的通知。 设备会根据各自的重试逻辑尝试重新连接,此时它们可从 IoT 中心请求并接收新的服务器证书,并且仅在信任 Digicert 全局根 G2 时重新连接。

请求延期

自 2023 年 8 月起,IoT 中心和 IoT Central 的延期请求流程关闭。 如果发现 IoT 中心在未与产品团队达成延期协议的情况下使用 Baltimore 证书,则中心将迁移,不会有任何进一步的通知。

所需的步骤

为准备迁移,请执行以下步骤:

  1. 将 Baltimore CyberTrust Root 保存在设备的受信任根存储中。 将 DigiCert Global Root G2 和 Microsoft RSA Root Certificate Authority 2017 证书添加到设备。 可以从 Azure 证书颁发机构详细信息下载所有这些证书。

    在 IoT 中心和 DPS 迁移完成之前,在你的设备上同时拥有这三个证书非常重要。 保留 Baltimore CyberTrust Root 可确保设备在迁移前保持连接状态,添加 DigiCert Global Root G2 可确保设备在迁移后无缝切换和重新连接。 Microsoft RSA Root Certificate Authority 2017 有助于防止将来当 DigiCert Global Root G2 意外停用时发生中断。

    有关 IoT 中心推荐的证书做法的详细信息,请参阅 TLS 支持

  2. 请确保你没有锁定任何中间证书或叶证书,并使用公共根来执行 TLS 服务器验证。

    IoT 中心和 DPS 偶尔会滚动更新其中间证书颁发机构 (CA)。 在这些情况下,如果设备显式查找中间 CA 或叶证书,设备将失去连接。 但是,使用公共根执行验证的设备将继续连接,而不管中间 CA 的任何变化。

有关如何测试设备是否已准备好进行 TLS 证书迁移的详细信息,请参阅博客文章 Azure IoT TLS:关键更改即将到来

检查 IoT 中心的迁移状态

要了解 IoT 中心是否已迁移,请检查中心的活动证书根。

  1. Azure 门户中导航到 IoT 中心。

  2. 在导航菜单的“自动化”部分中选择“导出模板”

  3. 等待模板生成,然后导航到 JSON 模板中的 resources.properties.features 属性。 如果 RootCertificateV2 列为一项功能,则中心已迁移到 DigiCert Global G2。

常见问题

我的设备使用的是 SAS/X.509/TPM 身份验证。 此迁移会影响我的设备吗?

迁移 TLS 证书不会影响 IoT 中心对设备进行身份验证的方式。 此迁移会影响设备对 IoT 中心和 DPS 终结点进行身份验证的方式。

IoT 中心和 DPS 向设备展示其服务器证书,而设备针对根对该证书进行身份验证,以信任它们与终结点的连接。 设备需要在其受信任的证书存储中具有新的 DigiCert Global Root G2,以便能够在此迁移后验证并连接到 Azure。

我的设备是使用 Azure IoT SDK 连接的。 我是否需要执行任何操作才能使 SDK 持续使用新证书?

视情况而定。

  • 需要,如果使用 Java V1 设备客户端。 此客户端将 Baltimore Cybertrust Root 证书与 SDK 一起打包。 你可以更新到 Java V2,也可以手动将 DigiCert Global Root G2 证书添加到源代码。
  • 不需要,如果使用其他 Azure IoT SDK。 大多数 Azure IoT SDK 依赖于基础操作系统的证书存储来检索受信任的根,以便在 TLS 握手期间进行服务器身份验证。

无论使用何种 SDK,我们都强烈建议所有客户在迁移前验证自己的设备,如博客文章 Azure IoT TLS:关键更改即将到来的验证部分中所述。

我的设备连接到主权 Azure 区域。 我是否仍需要更新它们?

不需要,只有全局 Azure 云受此更改的影响。 主权云不包括在此迁移中。

我使用的是 IoT Central。 是否需要更新我的设备?

需要,IoT Central 在后端同时使用 IoT 中心和 DPS。 TLS 迁移会影响你的解决方案,你需要更新设备以保持连接。

可以按自己的计划将应用程序从 Baltimore CyberTrust 根迁移到 DigiCert Global G2 根。 建议采用以下过程:

  1. 在 2024 年 9 月 30 日过渡期完成之前,请在设备上保留 Baltimore CyberTrust 根(防止连接中断所必需的)。
  2. 除了 Baltimore 根,还要确保 DigiCert Global G2 根添加到受信任的根存储。
  3. 请确保你没有锁定任何中间证书或叶证书,并使用公共根来执行 TLS 服务器验证。
  4. 在 IoT Central 应用程序中,可以在“设置”>“应用程序”>“Baltimore Cybertrust 迁移”下找到“根认证”设置。 
    1. 选择“DigiCert Global G2 根”以迁移到新的证书根。
    2. 单击“保存”以启动迁移。
    3. 如果需要,可以通过选择“Baltimore CyberTrust 根”并保存更改来迁移回 Baltimore 根。 此选择在 2023 年 8 月 15 日前可用,之后将被禁用。

我的设备需要多长时间才能重新连接?

有几个因素可能会影响设备重新连接的行为。

设备已配置为按特定间隔重新验证其连接。 Azure IoT SDK 中的默认设置是每 45 分钟重新验证一次。 如果你在解决方案中实施了不同的模式,那么你的体验可能会有所不同。

此外,在迁移过程中,IoT 中心可能会获得一个新的 IP 地址。 如果设备使用 DNS 服务器连接到 IoT 中心,DNS 服务器可能需要一个小时来刷新新的地址。 有关详细信息,请参阅 IoT 中心 IP 地址

我什么时候可以从设备中删除 Baltimore Cybertrust Root?

迁移的所有阶段完成后,你就可以删除 Baltimore 根证书。 如果只使用 IoT 中心,则可以在 IoT 中心迁移按计划于 2023 年 10 月 15 日完成后删除旧的根证书。 如果使用设备预配服务或 IoT Central,则需要将这两者的根证书保留在设备上,直到计划于 2024 年 9 月 30 日完成 DPS 迁移。

疑难解答

如果遇到 IoT 中心的常规连接问题,请查看以下故障排除资源:

如果在迁移证书后监视 Azure Monitor,应查找 DeviceDisconnect 事件,然后查找 DeviceConnect 事件,如以下屏幕截图所示:

Azure Monitor 日志的屏幕截图,其中显示了 DeviceDisconnect 和 DeviceConnect 事件。

如果在迁移后设备断开连接,但没有重新连接,请尝试执行以下步骤:

  • 检查 DNS 解析和握手请求是否已完成,且没有任何错误。

  • 验证设备是否已在证书存储中同时安装了 DigiCert Global Root G2 证书和 Baltimore 证书。

  • 使用以下 Kusto 查询来标识设备的连接活动。 有关详细信息,请参阅 Kusto 查询语言 (KQL) 概述

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend parsed_json = parse_json(properties_s)
    | extend SDKVersion = tostring(parsed_json.sdkVersion), DeviceId = tostring(parsed_json.deviceId), Protocol = tostring(parsed_json.protocol)
    | distinct TimeGenerated, OperationName, Level, ResultType, ResultDescription, DeviceId, Protocol, SDKVersion
    
  • 使用 Azure 门户 IoT 中心的“指标”选项卡跟踪设备重新连接过程。 理想情况下,在完成此迁移之前和之后,设备不会有任何变化。 建议监视的一个指标是“连接的设备”,但你可以使用主动监视的任何图表。