使用 x509 正确配置 Azure IoT 中心 DPS 组注册

Proper configuration of Azure IoT Hub DPS group enrollment with x509

我对 Auzre 物联网中心的正确配置证书有疑问。我想通过组注册使用设备配置服务。我的目标是达到以下场景:使用 CA 根证书生成一些中间证书,然后使用这个中间证书来签署设备的证书。因此,在阅读文档后,我理解的是以下步骤:

  1. 上传 CA 根证书:

  1. 在组注册配置中上传中间证书:

  1. 使用 Java 代码中的设备证书进行配置。

这仅在我通过设备代码中的中间证书时有效(无论我在第 2 步中选择 CA 还是中间证书):

private static final Collection<String> INTERMEDIATE_CERTS = new LinkedList<>();
...
SecurityProvider securityProviderX509 = new SecurityProviderX509Cert(privateCert, privateKey, INTERMEDIATE_CERTS);
provisioningDeviceClient = ProvisioningDeviceClient.create(globalEndpoint, idScope, PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL, securityProviderX509);

此代码来自 azure 的 github 示例。在设备代码中使用中间证书的目的是什么?不应该根据前面步骤中上传到 Azure 的中间和根 CA 证书链对其进行验证吗?

上传中间证书时,唯一上传的是证书本身,而不是从根到中间的整个链。中间证书唯一拥有的是有关签署它的证书的信息,仅此而已。一条链中可以有多个中间链,我们在评估设备的证书链时不能对中间链做任何假设。

设备需要为 DPS 提供其整个证书链才能成功配置设备。没有完整的链,就无法确定经过验证的证书是否在设备的信任链中。

我们建议使用中间证书对设备进行签名,因为安全 best-practice 是为了让根保持离线状态。