创建演示证书用于测试 IoT Edge 设备功能

适用于:IoT Edge 1.5 勾选标记 IoT Edge 1.5

重要

IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是较低的版本,请参阅更新 IoT Edge

IoT Edge 设备需要证书来保护运行时、模块和任何下游设备之间的通信。 如果没有用于创建所需证书的证书颁发机构,请使用演示证书在测试环境中试用 IoT Edge 功能。 本文介绍 IoT Edge 提供的用于测试的证书生成脚本。

警告

这些证书将在 30 天内过期,不应在任何生产方案中使用这些证书。

在任何计算机上创建证书,然后将其复制到 IoT Edge 设备,或直接在 IoT Edge 设备上生成证书。

先决条件

使用已安装 Git 的开发计算机。

下载测试证书脚本并设置工作目录

GitHub 上的 IoT Edge 存储库包含可用于创建演示证书的证书生成脚本。 本部分说明如何准备好可在 Windows 或 Linux 计算机上运行的脚本。

若要在 Linux 设备上创建演示证书,需要克隆生成脚本并将其设置为在 bash 中本地运行。

  1. 克隆 IoT Edge git 存储库,其中包含用于生成演示证书的脚本。

    git clone https://github.com/Azure/iotedge.git
    
  2. 创建目录并在那里复制证书脚本。 所有证书和密钥文件都在此目录中创建。

    mkdir wrkdir
    cd wrkdir
    cp ../iotedge/tools/CACertificates/*.cnf .
    cp ../iotedge/tools/CACertificates/certGen.sh .
    

创建根 CA 证书

运行此脚本以生成根 CA 证书。 本文中的每个步骤都需要此证书。

使用根 CA 证书创建用于测试 IoT Edge 方案的其他演示证书。 可以使用同一根 CA 证书为多个 IoT Edge 或下游设备创建演示证书。

如果工作文件夹中已有根 CA 证书,请不要创建新证书。 创建新的根 CA 证书会覆盖旧证书,并且从旧证书创建的任何下游证书将停止工作。 如果需要多个根 CA 证书,请在单独的文件夹中管理它们。

  1. 转到在其中放置证书生成脚本的工作目录 wrkdir

  2. 创建根 CA 证书和一个中间证书。

    ./certGen.sh create_root_and_intermediate
    

    此脚本创建多个证书和密钥文件。 当文章请求 根 CA 证书时,请使用以下文件:

    certs/azure-iot-test-only.root.ca.cert.pem

在为 IoT Edge 设备和下游设备创建更多证书之前,需要此证书,如后续部分所述。

为 IoT Edge 设备创建标识证书

如果选择使用 X.509 证书身份验证,IoT Edge 设备标识证书将用于预配 IoT Edge 设备。 如果使用对称密钥对 IoT 中心或 DPS 进行身份验证,则不需要这些证书,可以跳过此部分。

无论使用手动预配还是通过 Azure IoT 中心设备预配服务 (DPS) 进行自动预配,这些证书都有效。

设备标识证书位于 IoT Edge 设备配置文件的 Provisioning 节。

  1. 导航到包含证书生成脚本和根 CA 证书的工作目录 wrkdir

  2. 使用以下命令创建 IoT Edge 设备标识证书和私钥:

    ./certGen.sh create_edge_device_identity_certificate "<device-id>"
    

    传递给此命令的名称将是 IoT 中心的 IoT Edge 设备的设备 ID。

  3. 此脚本会创建多个证书和密钥文件,其中包括在 DPS 中创建单个注册以及安装 IoT Edge 运行时时会使用的三个证书和密钥文件:

    类型 文件 说明
    设备标识证书 certs/iot-edge-device-identity-<device-id>.cert.pem 由前面生成的中间证书签名。 仅包含标识证书。 在配置文件中指定,以便进行 DPS 单个注册或 IoT 中心预配。
    完整链证书 certs/iot-edge-device-identity-<device-id>-full-chain.cert.pem 包含完整证书链,其中有中间证书。 在配置文件中指定,以便 IoT Edge 将其提供给 DPS 进行组注册预配。
    私钥 private/iot-edge-device-identity-<device-id>.key.pem 与设备标识证书关联的私钥。 只要对 DPS 或 IoT 中心使用某种证书身份验证(指纹或 CA),就应在配置文件中指定。

创建 Edge CA 证书

网关 方案 需要这些证书,因为 Edge CA 证书允许 IoT Edge 设备向下游设备验证其标识。 如果不将任何下游设备连接到 IoT Edge,请跳过本部分。

Edge CA 证书还会为设备上运行的模块创建证书,但如果未设置 Edge CA,IoT Edge 运行时可以创建临时证书。 将 Edge CA 证书放置在 IoT Edge 设备上的文件的 Edge CA 部分中 config.toml 。 有关详细信息,请参阅了解 Azure IoT Edge 如何使用证书

  1. 导航到包含证书生成脚本和根 CA 证书的工作目录。

  2. 使用以下命令创建 IoT Edge CA 证书和私钥。 输入 CA 证书的名称。 请勿在配置文件中的主机名参数或 IoT 中心的设备 ID 中使用与 create_edge_device_ca_certificate 命令相同的名称。

    ./certGen.sh create_edge_device_ca_certificate "<CA cert name>"
    
  3. 此脚本命令将创建多个证书和密钥文件。 将以下证书和密钥对复制到 IoT Edge 设备,并在配置文件中引用它们:

    • certs/iot-edge-device-ca-<CA cert name>-full-chain.cert.pem
    • private/iot-edge-device-ca-<CA cert name>.key.pem

创建下游设备证书

这些证书是为网关方案设置下游 IoT 设备所需的,需要将 X.509 身份验证与 IoT 中心或 DPS 配合使用。 如果你要使用对称密钥身份验证,则无需为下游设备创建证书,可以跳过此部分。

可通过两种方式使用 X.509 证书对 IoT 设备进行身份验证:使用自签名证书,或使用证书颁发机构 (CA) 签名的证书。

  • 对于 X.509 自签名身份验证(有时称为指纹身份验证),需要创建新证书并将其放在 IoT 设备上。 这些证书包含一个指纹,你可以与 IoT 中心共享该指纹以完成身份验证。
  • 对于 X.509 证书颁发机构 (CA) 签名的身份验证,需要在 IoT 中心或 DPS 中注册一个用来为 IoT 设备证书签名的根 CA 证书。 使用由根 CA 证书或其任何中间证书颁发的证书的任何设备都可以进行身份验证,前提是设备提供完整链。

证书生成脚本可帮助你生成演示证书,以测试上述任一身份验证方案。

自签名证书

使用自签名证书对 IoT 设备进行身份验证时,需要基于解决方案的根 CA 证书创建设备证书。 然后,从要提供给 IoT 中心的证书中检索十六进制“指纹”。 IoT 设备还需要其设备证书的副本,以便可以在 IoT 中心进行身份验证。

  1. 导航到包含证书生成脚本和根 CA 证书的工作目录。

  2. 为下游设备创建两个证书(主要和辅助)。 要使用的简易命名约定是依次使用 IoT 设备的名称以及主要标签或辅助标签创建证书。 例如:

    ./certGen.sh create_device_certificate "<device name>-primary"
    ./certGen.sh create_device_certificate "<device name>-secondary"
    

    此脚本命令将创建多个证书和密钥文件。 以下证书和密钥对需要复制到下游 IoT 设备,并在连接到 IoT 中心的应用程序中引用:

    • certs/iot-device-<device name>-primary-full-chain.cert.pem
    • certs/iot-device-<device name>-secondary-full-chain.cert.pem
    • certs/iot-device-<device name>-primary.cert.pem
    • certs/iot-device-<device name>-secondary.cert.pem
    • certs/iot-device-<device name>-primary.cert.pfx
    • certs/iot-device-<device name>-secondary.cert.pfx
    • private/iot-device-<device name>-primary.key.pem
    • private/iot-device-<device name>-secondary.key.pem
  3. 从每个证书中检索 SHA1 指纹(在 IoT 中心上下文中称为“指纹”)。 指纹是由 40 个十六进制字符组成的字符串。 使用以下 openssl 命令查看证书并查找指纹:

    openssl x509 -in certs/iot-device-<device name>-primary.cert.pem -text -thumbprint | sed 's/[:]//g'
    

    使用自签名的 X.509 证书注册新 IoT 设备时,请提供主要指纹和辅助指纹。

CA 签名的证书

使用 CA 签名的证书对 IoT 设备进行身份验证时,需将解决方案的根 CA 证书上传到 IoT 中心。 使用同一个根 CA 证书创建要放在 IoT 设备上的设备证书,使设备能够通过 IoT 中心进行身份验证。

本部分中的证书适用于 IoT 中心 X.509 证书教程系列中的步骤。 有关此系列的介绍,请参阅了解公钥加密和 X.509 公钥基础结构

  1. 将根 CA 证书文件从工作目录 certs\azure-iot-test-only.root.ca.cert.pem 上传到 IoT 中心。

  2. 如果未选择自动验证,请使用 Azure 门户中提供的代码验证你是否拥有该根 CA 证书。

    ./certGen.sh create_verification_certificate "<verification code>"
    
  3. 创建下游设备的证书链。 使用 IoT 中心内用于注册设备的设备 ID。

    ./certGen.sh create_device_certificate "<device id>"
    

    此脚本命令将创建多个证书和密钥文件。 以下证书和密钥对需要复制到下游 IoT 设备,并在连接到 IoT 中心的应用程序中引用:

    • certs/iot-device-<device id>.cert.pem
    • certs/iot-device-<device id>.cert.pfx
    • certs/iot-device-<device id>-full-chain.cert.pem
    • private/iot-device-<device id>.key.pem