使用 X.509 证书身份验证设置 Azure IoT Edge 设备

本文提供了相关步骤,用于在 IoT 中心注册新的 IoT Edge 设备并将相应设备配置为使用 X.509 证书进行身份验证。

本文中的步骤演示手动预配过程,在手动预配过程中,可手动将每个设备连接到其 IoT 中心。 另一种方式是使用 IoT 中心设备预配服务进行自动预配,在需要预配许多设备时,这会很有用。

对于手动预配,可以通过两种方式来验证 IoT Edge 设备:

  • 对称密钥:在 IoT 中心创建新的设备标识时,该服务会创建两个密钥。 将其中一个密钥置于设备上,并在进行身份验证时将该密钥提供给 IoT 中心。

    此身份验证方法更容易上手,但不够安全。

  • X.509 自签名:创建两个 X.509 标识证书并将其置于设备上。 在 IoT 中心创建新的设备标识时,需要提供两个证书的指纹。 当设备向 IoT 中心进行身份验证时,它将出示其证书,而 IoT 中心会验证证书是否与指纹匹配。

    此身份验证方法更安全,建议用于生产场景。

本文演示使用 X.509 证书身份验证的注册和预配过程。 如果要了解如何使用对称密钥设置设备,请参阅使用对称密钥身份验证设置 Azure IoT Edge 设备

先决条件

在按照本文中的步骤进行操作之前,应已在设备上安装了 IoT Edge 运行时。 否则,请按照安装或卸载 Azure IoT Edge 运行时中的步骤进行操作。

使用 X.509 证书手动预配需要 IoT Edge 1.0.10 或更高版本。

创建证书和指纹

设备标识证书是通过证书信任链连接到顶级 X.509 证书颁发机构 (CA) 证书的叶证书。 设备标识证书的公用名 (CN) 必须设置为你希望该设备在 IoT 中心内使用的设备 ID。

设备标识证书仅用于预配 IoT Edge 设备,以及通过 Azure IoT 中心对设备进行身份验证。 设备标识证书不是签名证书,这与 CA 证书不同,后者是 IoT Edge 设备向模块或叶设备提供的用于验证的证书。 有关详细信息,请参阅 Azure IoT Edge 证书用法详细信息

创建设备标识证书后,应会获得两个文件:一个包含证书公共部分的 .cer 或 .pem 文件,一个包含证书私钥的 .cer 或 .pem 文件。

若要使用 X.509 进行手动预配,需要以下文件:

  • 两组设备标识证书和私钥证书。 其中一组证书/密钥文件提供给 IoT Edge 运行时。
  • 从两个设备标识证书获取的指纹。 SHA-1 哈希的指纹值为 40 个十六进制字符,SHA-256 哈希的指纹值为 64 个十六进制字符。 在注册设备时,两个指纹都将提供给 IoT 中心。

如果没有可用的证书,可以创建演示证书以测试 IoT Edge 设备功能。 按照该文章中的说明设置证书创建脚本、创建根 CA 证书,然后创建两个 IoT Edge 设备标识证书。

从证书中检索指纹的一种方法是使用以下 openssl 命令:

openssl x509 -in <certificate filename>.pem -text -fingerprint

注册新设备

连接到 IoT 中心的每个设备都有一个设备 ID,用于跟踪云到设备或设备到云的通信。 可以使用设备连接信息来配置设备,其中包括 IoT 中心主机名、设备 ID 以及设备用于向 IoT 中心进行身份验证的信息。

对于 X.509 证书身份验证,此信息以从设备标识证书获取的指纹形式提供。 在注册设备时,会向 IoT 中心提供这些指纹,以便服务在连接时能够识别设备。

你可以使用多个工具在 IoT 中心注册新的 IoT Edge 设备,并上传其证书指纹。

Azure 门户的必备组件

Azure 订阅中的免费或标准 IoT 中心

在 Azure 门户中创建 IoT Edge 设备

在 Azure 门户的 IoT 中心,IoT Edge 设备的创建和管理独立于不支持 Edge 的 IoT 设备。

  1. 登录 Azure 门户,导航到 IoT 中心。

  2. 在左侧窗格中,从菜单中选择“IoT Edge”,然后选择“添加 IoT Edge 设备” 。

    Add an IoT Edge device from the Azure portal

  3. 在“创建设备”页面上,提供以下信息:

    • 创建描述性设备 ID。 记下此设备 ID,因为在下一部分会用到它。
    • 选择“X.509 自签名”作为身份验证类型。
    • 提供主要和辅助标识证书指纹。 SHA-1 哈希的指纹值为 40 个十六进制字符,SHA-256 哈希的指纹值为 64 个十六进制字符。
  4. 选择“保存”。

在 Azure 门户中查看 IoT Edge 设备

所有连接到 IoT 中心并已启用 Edge 的设备都列在 IoT Edge 页上。

View all IoT Edge devices in your IoT hub

配置 IoT Edge 设备

IoT Edge 设备在 IoT 中心具有标识后,需要使用其云标识和标识证书来配置设备。

在 Linux 设备上,通过编辑 config.yaml 文件来提供此信息。 在 Windows 设备上,通过运行 PowerShell 脚本来提供此信息。

  1. 在 IoT Edge 设备上,打开配置文件。

    sudo nano /etc/iotedge/config.yaml
    
  2. 找到该文件的预配配置部分。

  3. 注释掉“使用连接字符串手动预配配置”部分。

  4. 取消注释“使用 X.509 标识证书手动预配配置”部分。 请确保 provisioning: 行前面没有空格,并且嵌套项缩进了两个空格。

    # Manual provisioning configuration using a connection string
    provisioning:
      source: "manual"
      authentication:
        method: "x509"
        iothub_hostname: "<REQUIRED IOTHUB HOSTNAME>"
        device_id: "<REQUIRED DEVICE ID PROVISIONED IN IOTHUB>"
        identity_cert: "<REQUIRED URI TO DEVICE IDENTITY CERTIFICATE>"
        identity_pk: "<REQUIRED URI TO DEVICE IDENTITY PRIVATE KEY>"
      dynamic_reprovisioning: false
    
  5. 更新以下字段:

    • iothub_hostname:设备将连接到的 IoT 中心的主机名。 例如 {IoT hub name}.azure-devices.net
    • device_id:注册设备时提供的 ID。
    • identity_cert:设备上标识证书的 URI。 例如 file:///path/identity_certificate.pem
    • identity_pk:所提供标识证书私钥文件的 URI。 例如 file:///path/identity_key.pem
  6. 保存并关闭该文件。

    CTRL + XYEnter

  7. 在配置文件中输入预配信息后,重启守护程序:

    sudo systemctl restart iotedge
    

验证安装是否成功

检查 IoT Edge 服务的状态。 该服务应列为“正在运行”。

systemctl status iotedge

检查服务日志。

journalctl -u iotedge --no-pager --no-full

运行故障排除工具,检查最常见的配置和网络错误。

iotedge check

在将第一个模块部署到设备上的 IoT Edge 之前, $edgeHub 系统模块不会部署到设备。 因此,自动检查会返回一个针对 Edge Hub can bind to ports on host 连接性检查的错误。 此错误可以忽略,除非它是在将模块部署到设备后发生的。

最后,列出正在运行的模块:

iotedge list

完成新的安装后,应会看到唯一运行的模块是 edgeAgent

提示和故障排除

在资源受限的设备上,强烈建议按照故障排除指南中的说明将 OptimizeForPerformance 环境变量设置为 false

如果设备无法连接到 IoT 中心且网络具有代理服务器,请按照配置 IoT Edge 设备以通过代理服务器进行通信中的步骤进行操作。

在 Linux 设备上,需要提升的权限才能运行 iotedge 命令。 安装运行时后,请从计算机中注销并重新登录以自动更新权限。 在此之前,请使用 sudo 通过提升的权限运行命令。

后续步骤

转到部署 IoT Edge 模块,了解如何将模块部署到设备上。