管理 IoT Edge 证书

适用于: “是”图标 IoT Edge 1.1

重要

IoT Edge 1.1 终止支持日期为 2022 年 12 月 13 日。 请查看 Microsoft 产品生命周期,了解此产品、服务、技术或 API 的受支持情况。 有关更新到最新版本的 IoT Edge 的详细信息,请参阅 更新 IoT Edge

所有 IoT Edge 设备使用证书在运行时与设备上运行的任何模块之间创建安全连接。 充当网关的 IoT Edge 设备也使用相同的证书连接到其下游设备。 有关 IoT Edge 设备上不同证书的功能的详细信息,请参阅了解 Azure IoT Edge 如何使用证书

注意

整篇文章中使用的术语“根 CA”是指 IoT 解决方案证书链的最顶层颁发机构的证书。 不需要使用联合证书颁发机构的证书根,也不需要使用组织证书颁发机构的根。 在许多情况下,它实际上是中间 CA 证书。

先决条件

  • 了解 Azure IoT Edge 如何使用证书

  • IoT Edge 设备。 如果未设置 IoT Edge 设备,可在 Azure 虚拟机中创建一个。 按照创建虚拟 Linux 设备创建虚拟 Windows 设备快速入门文章(其中一篇)中的步骤进行操作。

  • 能够按照配置模板编辑 IoT Edge 配置文件 config.toml

    • 如果 config.toml 不基于模板,请打开模板并使用注释指南在模板结构之后添加配置部分。

    • 如果有尚未配置的新 IoT Edge 安装,请复制模板以初始化配置。 如果有现有配置,请勿使用此命令。 它会覆盖文件。

      sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
      

设备 CA

所有 IoT Edge 设备使用证书在运行时与设备上运行的任何模块之间创建安全连接。 充当网关的 IoT Edge 设备也使用相同的证书连接到其下游设备。 有关 IoT Edge 设备上不同证书的功能的详细信息,请参阅了解 Azure IoT Edge 如何使用证书

在多种情况下,IoT Edge 会在设备上自动生成设备 CA,这些情况包括:

  • 如果你在安装和预配 IoT Edge 时未提供自己的生产证书,则 IoT Edge 安全管理器会自动生成一个设备 CA 证书。 这个自签名证书仅用于开发和测试方案,而不可用于生产。 此证书在 90 天后过期。
  • IoT Edge 安全管理器还会生成由设备 CA 证书签名的工作负载 CA 证书。

对于这两个自动生成的证书,可以选择在配置文件中设置一个标志,以配置证书生存期的天数。

注意

IoT Edge 安全管理器还会创建第三个自动生成的证书:IoT Edge 中心服务器证书。 此证书的生存期一律为 30 天,但过期之前会自动续订。 在配置文件中设置的自动生成的 CA 生存期值不影响此证书。

自定义快速入门设备 CA 证书生存期

如果在指定的天数后到期,则必须重启 IoT Edge 以重新生成设备 CA 证书。 设备 CA 证书不会自动续订。

  1. 若要将证书到期时间配置为默认的 90 天以外的时间,请在配置文件的 certificates 节中添加所需值(以天为单位)。

    certificates:
      device_ca_cert: "<ADD URI TO DEVICE CA CERTIFICATE HERE>"
      device_ca_pk: "<ADD URI TO DEVICE CA PRIVATE KEY HERE>"
      trusted_ca_certs: "<ADD URI TO TRUSTED CA CERTIFICATES HERE>"
      auto_generated_ca_lifetime_days: <value>
    

    注意

    目前存在一个 libiothsm 限制,会阻止使用在 2038 年 1 月 1 日或之后到期的证书。

  2. 删除 hsm 文件夹的内容以删除所有以前生成的证书。

    • /var/aziot/hsm/certs
    • /var/aziot/hsm/cert_keys
  3. 重启 IoT Edge 服务。

    sudo systemctl restart iotedge
    
  4. 确认生存期设置。

    sudo iotedge check --verbose
    

    查看“生产就绪状态: 证书”检查的输出,其中列出了自动生成的设备 CA 证书在过期前的天数。

安装用于生产的设备 CA

一旦转移到生产方案,或者想要创建网关设备,就需要提供自己的证书。

创建并安装用于生产的设备 CA

  1. 使用自己的证书颁发机构创建以下文件:

    • 根 CA
    • 设备 CA 证书
    • 设备 CA 私钥

    根 CA 不是组织的最顶层证书颁发机构。 它是 IoT Edge 方案的最顶层证书颁发机构,IoT Edge 中心模块、用户模块和任何下游设备使用该颁发机构来建立彼此之间的信任。

    若要查看这些证书的示例,请查看管理用于示例和教程的测试 CA 证书中用于创建演示证书的脚本。

    注意

    目前存在一个 libiothsm 限制,会阻止使用在 2038 年 1 月 1 日或之后到期的证书。

  2. 将三个证书和密钥文件复制到 IoT Edge 设备。 可以使用 Azure Key Vault 之类的服务或安全复制协议之类的功能来移动证书文件。 如果在 IoT Edge 设备本身上生成了证书,则可以跳过此步骤,并使用工作目录的路径。

    提示

    如果你已使用示例脚本创建演示证书,这三个证书和密钥文件将位于以下路径:

    • 设备 CA 证书:<WRKDIR>\certs\iot-edge-device-MyEdgeDeviceCA-full-chain.cert.pem
    • 设备 CA 私钥:<WRKDIR>\private\iot-edge-device-MyEdgeDeviceCA.key.pem
    • 根 CA:<WRKDIR>\certs\azure-iot-test-only.root.ca.cert.pem
  1. 打开 IoT Edge 安全守护程序配置文件:/etc/iotedge/config.yaml

  2. 将 config.yaml 文件中的 certificate 属性设置为 IoT Edge 设备上的证书和密钥文件的文件 URI 路径。 删除 certificate 属性前面的 # 字符,以取消注释四个代码行。 请确保 certificates: 行前面没有空格,并且嵌套项缩进了两个空格。 例如:

    certificates:
       device_ca_cert: "file:///<path>/<device CA cert>"
       device_ca_pk: "file:///<path>/<device CA key>"
       trusted_ca_certs: "file:///<path>/<root CA cert>"
    
  3. 请确保用户“iotedge”对保存证书的目录拥有读取/写入权限。

  4. 如果以前在设备上使用过 IoT Edge 的任何其他证书,请在启动或重启 IoT Edge 之前删除以下两个目录中的文件:

    • /var/aziot/hsm/certs
    • /var/aziot/hsm/cert_keys
  5. 重启 IoT Edge。

    sudo iotedge system restart
    

模块服务器证书

Edge 守护程序颁发模块服务器和标识证书以供 Edge 模块使用。 Edge 模块仍负责根据需要续订其标识和服务器证书。

续订

服务器证书可以通过 Edge CA 证书颁发,也可以通过 DPS 配置的 CA 颁发。 无论颁发方法如何,模块都必须续订这些证书。

1.2 及更高版本中的更改

  • “设备 CA 证书”已重命名为“Edge CA 证书”。
  • “工作负荷 CA 证书”已被弃用。 现在,IoT Edge 安全管理器直接从 Edge CA 证书生成 IoT Edge 中心 edgeHub 服务器证书,它们之间没有中间工作负载 CA 证书。
  • 默认配置文件采用新的名称和位置,默认为从 /etc/iotedge/config.yaml/etc/aziot/config.toml。 可借助 iotedge config import 命令将配置信息从旧位置迁移到新位置,并将旧语法更改为新语法。

后续步骤

在生产环境中部署解决方案之前,必须先在 IoT Edge 设备上安装证书。 详细了解如何准备在生产环境中部署 IoT Edge 解决方案