证书生命周期和续订

客户端证书密钥对和 CA 证书定期过期。 网络基础结构和设备必须能够处理证书过期并出示新证书,而不会丢失连接。 用于 RADIUS 服务器身份验证的根 CA 证书和用于设备身份验证的客户端证书需要不同的更新方法。

谨慎

由于证书 ID 是系统范围的,因此添加新证书的 az sphere 命令或函数调用可能会覆盖由早期命令或函数调用添加的证书,这可能会导致网络连接失败。 强烈建议你制定明确的证书更新过程,并仔细选择证书 ID。

有关 Azure Sphere 如何使用 证书 ID 的详细信息,请参阅证书 ID。

更新根 CA 证书

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

在典型的无线网络上,无法执行“刀刃”直接转换:也就是说,无法在根 CA 变为无效的确切时刻更新所有 Azure Sphere 设备。 设备可能在关键时刻处于脱机状态,或者计时准确性可能因安装而异。 高级应用程序必须能够在当前根 CA 证书过期或更改之前获取新的根 CA 证书,以便新证书在需要时可供使用。

建议的方法是创建并启用第二个网络,该网络的配置与现有网络相同,但使用新的根 CA 证书。 当现有根 CA 证书在原始网络上失败时,OS 将自动尝试连接到第二个网络。 然后,应用程序可以使用新的根 CA 替换原始网络上的证书,并删除第二个网络。 然后,设备可以使用原始网络进行连接,该网络现在具有新的根 CA。 下图总结了此方法。

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

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

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

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

    网络管理员负责更新 RADIUS 服务器上的证书,并确保 Azure Sphere 设备得到适当更新。

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

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

  5. 应用每天通过调用 WifiConfig_GetConnectedNetworkId 进行轮询,以确定设备连接到的网络。

    如果连接的网络的每日检查失败,则错误可能由服务器或设备端的证书问题或其他问题引起。 有关帮助 ,请参阅排查网络问题

    如果设备已连接到 Network1,则表示证书尚未过期,并且一切正常。 应用重复此步骤,直到设备连接到 Network2。

    如果设备已连接到 Network2,这意味着旧证书已过期,更新的 PKI 在 RADIUS 服务器上设置,并且设备可以使用根 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 配置。 如果连接成功,则重新加载的配置将使用新的 ClientCert1,它已被 ClientCert2 取代。 如果连接失败,则重新加载的配置将使用 ClientCert1。