证书生命周期和续订

重要

这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。

客户端证书-密钥对和 CA 证书会定期过期。 网络基础结构和设备必须能够在不失去连接的情况下处理证书过期和呈现新证书。 用于 RADIUS 服务器身份验证的根 CA 证书,以及设备身份验证中使用的客户端证书,这两者需要不同的更新方法。

注意

因为证书 ID 在系统范围内应用,所以,用于添加新证书的 azsphere 命令或函数调用可能会覆盖通过先前的命令或函数调用添加的证书,因而可能会导致网络连接失败。 强烈建议你制定清晰的证书更新过程,并仔细选择证书 ID。

有关 Azure Sphere 如何使用证书 ID 的更多信息,请参见证书 ID

更新根 CA 证书

CA 证书是 RADIUS 服务器上身份验证证书的根 CA。 如果 CA 证书过期或服务器的 PKI 发生更改(例如,如果服务器从不同的证书颁发机构获取新的根 CA),Azure Sphere 设备将无法再对 RADIUS 身份验证服务器进行身份验证。 不过,设备需要继续正常工作。

在典型无线网络中,无法执行“结果难料”的直接转换。也就是说,当根 CA 失效时,不能完全更新所有 Azure Sphere 设备。 设备可能会在关键时刻处于脱机状态,或者计时准确性可能会因安装的不同而异。 高级应用程序必须能够在当前的根 CA 证书过期或更改之前获得新的根 CA 证书,以便在需要时可以使用新证书。

推荐的方法是创建并启用与现有网络具有相同配置的第二个网络,但使用新的根 CA 证书。 当原始网络上的现有根 CA 证书出现故障时,操作系统将自动尝试连接到第二个网络。 然后,应用程序可以将原始网络上的证书替换为新的根 CA,并删除第二个网络。 之后,设备可以使用原始网络进行连接,该网络现在具有新的根 CA。 下图概述了这一方法。

用于更新根 CA 证书的应用程序流

高级别应用程序应按照以下步骤无缝处理对根 CA 证书的更新:

  1. 作为正常操作的一部分,应用程序将配置类型为 WifiConfig_Security_Wpa2_EAP_TLS 的 Network1。 此网络链接到设备的客户端证书和根 CA1,后者是 RADIUS 服务器的原始根 CA。

  2. 大约在根 CA 过期之前的 90 天,设备会收到云到设备的通知,指出将需要 RADIUS 服务器的新根 CA 证书。 通知可由网络管理员或其他操作员触发;可能的通知机制包括Azure IoT 中心或 Azure IoT Central 云到设备的消息。

    网络管理员负责在 RADIUS 服务器上更新证书,并确保 Azure Sphere 设备将相应更新。

  3. 应用获取新的根 CA,并调用 CertStore_InstallRootCACertificate 以将其保存为根 CA2。

  4. 此应用通过调用 WifiConfig_AddDuplicateNetwork 复制 Network1 配置,来创建新的网络 Network2。 然后,它将根 CA2 链接到 Network2 ,并启用 Network2。 如果在设备上启用了 Network2 并可连接到 Internet,则设备将在 Network1 不可用时使用 Network2。

  5. 应用会通过 WifiConfig_GetConnectedNetworkId 每日轮询来确定设备连接到的网络。

    如果每日检查连接的网络失败,则该错误可能是由于服务器或设备端出现证书问题或某些其他问题导致的。 有关帮助,请参阅 排查网络问题

    如果设备连接到 Network1,这意味着该证书尚未过期并且一切正常。 应用会重复此步骤,直到设备连接到 Network2。

    如果设备已连接到 Network2,这意味着旧证书已过期,已在 RADIUS 服务器上设置更新的 PKI,并且设备能够使用根 CA2 对服务器进行身份验证。

  6. 当设备正常使用 Network2 时,应用完成对网络配置所做的更改:

更新客户端证书

客户端证书由用于对 Azure Sphere 设备进行身份验证的公钥和私钥对组成。 与根 CA 证书一样,客户端证书将在一段时间后过期,并且设备必须能够提供新的证书。 高级应用程序负责在现有证书过期之前获取新证书。 应用可以通过调用 CertStore_GetCertificateNotAfter 来获取证书过期的日期和时间。

下图概述了这一过程。 此模式允许证书更新代码使用常量证书 ID(如 ClientCert1 和 ClientCert2),而不是为每个新证书创建唯一名称。 此外,它不要求进行网络交换或客户端证书清理。

用于更新根客户端的应用程序流

高级别应用程序应按照以下步骤无缝处理对客户端证书的更新:

  1. 作为正常操作的一部分,应用程序将配置类型为 WifiConfig_Security_Wpa2_EAP_TLS 的 Network1。 此网络链接到设备的客户端证书 (ClientCert1) 以及 RADIUS 服务器的根 CA。 在应用启动更新过程之前,它通过调用 WifiConfig_GetNetworkIdByConfigNameWifiConfig_GetConnectedNetworkId 来验证设备是否已连接到 Network1。 如果网络 ID 匹配,则应用可以确保它已连接到目标网络。

  2. 应用按固定的时间间隔调用 CertStore_GetCertificateNotAfter ,以确定客户端证书的过期时间。 或者,应用程序可以在可变存储中存储到期日期;但是,它仍应在每天和每次重新启动后检查到期日期。

    此应用将到期日期和时间与当前日期和时间进行比较。 如果证书在预先确定的阈值期限内过期,则应用将获取新证书。 阈值期限的长度任你选择。 最佳做法是,建议在过期前至少四周获取新证书,以防设备长时间脱机或遇到重复的网络或服务器问题。 检查越早,就有越多的时间来解决任何问题。

  3. 应用会从相应的证书颁发者获取新证书。 证书颁发者的选择是本地网络管理员的责任。

  4. 应用通过调用 CertStore_InstallClientCertificate 将新证书另存为 ClientCert2,并通过 WifiConfig_SetClientCertStoreIdentifier 将其添加到 Network1 Wi-Fi 配置。

  5. 应用通过调用 WifiConfig_ReloadConfig 重新加载 Wi-Fi 配置。 此步骤使 ClientCert2 可用于在网络连接中使用的设备。

  6. 检查网络连接是否成功。

    • 成功连接意味着 ClientCert2 现在有效。

    • 连接失败意味着 ClientCert2 仍然无效,或者出现其他错误。

      • 如果证书仍然无效,则继续执行步骤 7,将网络配置恢复到其原始状态。
      • 如果发生了一些其他错误,请参阅 排查网络问题 以获取帮助,然后重试连接。
  7. 不管网络连接是否成功,都请通过调用 WifiConfig_ReloadConfig 重新加载 Wi-Fi 配置。 如果连接成功,则重新加载的配置将使用 ClientCert2 替换的新 ClientCert1。 如果连接失败,则重新加载的配置将使用 ClientCert1。