选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

模块 7:模拟硬件安全集成

聚焦模式
模块 7:模拟硬件安全集成 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

此功能适用于 AWS IoT Greengrass 酷睿 v1.7 及更高版本。

此高级模块向您展示如何配置模拟硬件安全模块 (HSM) 以便与 Greengrass 核心一起使用。该配置使用 SoftHSM,这是一个使用 PKCS#11 应用程序编程接口 (API) 的纯软件实现。此模块的目的是允许您设置一个环境,您可以在其中学习 PKCS#11 API 的纯软件实现并针对其进行初始测试。它仅用于学习和初始测试,不适用于任何类型的生产用途。

您可以通过此配置尝试使用与 PKCS#11 兼容的服务来存储您的私有密钥。有关纯软件实施的更多信息,请参阅 SoftHSM。有关在内 AWS IoT Greengrass 核上集成硬件安全的更多信息(包括一般要求),请参阅硬件安全性集成

重要

此模块仅用于实验目的。我们强烈建议不要在生产环境中使用 SoftHSM,因为它可能产生一种安全性得到增强的错觉。实际上,生成的配置不具备任何实际安全性优势。存储在 SoftHSM 中的密钥并不比 Greengrass 环境中任何其他密钥存储方式更加安全。

本模块的目的是让您了解 PKCS#11 规范,并在将来计划使用基于硬件的实际 HSM 时对软件进行初始测试。

在用于生产用途之前,您必须单独全面地测试未来的硬件实现,因为 SoftHSM 中提供的 PKCS#11 实现与基于硬件的实现之间可能存在差异。

如果您在启动支持的硬件安全模块方面需要帮助,请联系您的 En AWS terprise Support 代表。

在开始之前,请运行 Greengrass 设备安装 脚本,或确保您已完成入门教程的模块 1模块 2。在本模块中,我们假设您的核心已经配置好并与 AWS之通信。本模块应该需要大约 30 分钟才能完成。

安装 SoftHSM 软件

在本步骤中,您将安装 SoftHSM 和 pkcs11 工具,这些工具用于管理您的 SoftHSM 实例。

  • 在 AWS IoT Greengrass 核心设备的终端中,运行以下命令:

    sudo apt-get install softhsm2 libsofthsm2-dev pkcs11-dump

    有关这些程序包的更多信息,请参阅安装 softhsm2安装 libsofthsm2-dev安装 pkcs11-dump

    注意

    如果您在系统上使用此命令时遇到问题,请参阅上的 softhSM 版本 2。 GitHub该网站提供了更多安装信息,包括如何从源代码构建。

配置 SoftHSM

在此步骤中,您将配置 SoftHSM

  1. 切换到根用户。

    sudo su
  2. 使用手册页面查找系统范围的 softhsm2.conf 位置。一个常见位置是 /etc/softhsm/softhsm2.conf,但在某些系统上,位置可能有所不同。

    man softhsm2.conf
  3. 在系统范围的位置中为 softhsm2 配置文件创建目录。在本例中,我们假设位置为 /etc/softhsm/softhsm2.conf

    mkdir -p /etc/softhsm
  4. /greengrass 目录中创建令牌目录。

    注意

    如果跳过此步骤,softhsm2-util 将报告 ERROR: Could not initialize the library

    mkdir -p /greengrass/softhsm2/tokens
  5. 配置令牌目录。

    echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
  6. 配置基于文件的后端。

    echo "objectstore.backend = file" >> /etc/softhsm/softhsm2.conf
注意

这些配置设置仅用于实验目的。要查看所有配置选项,请打开配置文件的手册页面。

man softhsm2.conf

将私有密钥导入 SoftHSM

在此步骤中,初始化 SoftHSM 令牌,转换私有密钥格式,然后导入私有密钥。

  1. 初始化 SoftHSM 令牌。

    softhsm2-util --init-token --slot 0 --label greengrass --so-pin 12345 --pin 1234
    注意

    如果出现提示,请输入 SO PIN 12345 和用户 PIN 1234。 AWS IoT Greengrass 不使用 SO(主管)PIN,因此您可以使用任何值。

    如果您收到 CKR_SLOT_ID_INVALID: Slot 0 does not exist 错误,请尝试执行以下命令:

    softhsm2-util --init-token --free --label greengrass --so-pin 12345 --pin 1234
  2. 将私有密钥转换成 SoftHSM 导入工具可以使用的格式。在本教程中,您将转换从“入门”教程模块 2 中的默认组创建选项中获得的私钥。

    openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in hash.private.key -out hash.private.pem
  3. 将私有密钥导入 SoftHSM。只运行以下命令之一,具体取决于您的 softhsm2-util 版本。

    Raspbian softhsm2-util v2.2.0 语法
    softhsm2-util --import hash.private.pem --token greengrass --label iotkey --id 0000 --pin 12340
    Ubuntu softhsm2-util v2.0.0 语法
    softhsm2-util --import hash.private.pem --slot 0 --label iotkey --id 0000 --pin 1234

    此命令将插槽标识为 0,并将键标签定义为 iotkey。您将在下一节中使用这些值。

导入私有密钥后,您可以选择将其从 /greengrass/certs 目录中删除。确保将根 CA 和设备证书保留在目录中。

配置 Greengrass 核心以使用 SoftHSM

在本步骤中,您将修改 Greengrass 核心配置文件以使用 SoftHSM。

  1. 在您的系统上找到 SoftHSM 提供程序库 (libsofthsm2.so) 的路径:

    1. 获取库的已安装程序包的列表。

      sudo dpkg -L libsofthsm2

      libsofthsm2.so 文件位于 softhsm 目录中。

    2. 复制文件的完整路径(例如 /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so)。您稍后会使用此值。

  2. 停止 Greengrass 守护程序。

    cd /greengrass/ggc/core/ sudo ./greengrassd stop
  3. 打开 Greengrass 配置文件。这是位于 /greengrass/config 目录中的 config.json 文件。

    注意

    本过程中的示例假设 config.json 文件使用“入门”教程模块 2 中的默认组创建选项生成的格式。

  4. crypto.principals 对象中,插入以下 MQTT 服务器证书对象。在需要的位置添加逗号以创建有效的 JSON 文件。

    "MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }
  5. crypto 对象中,插入以下 PKCS11 对象。在需要的位置添加逗号以创建有效的 JSON 文件。

    "PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" }

    您的文件应如下所示:

    { "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "hash.cert.pem", "keyPath" : "hash.private.key", "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name", "iotHost" : "host-prefix.iot.region.amazonaws.com", "ggHost" : "greengrass.iot.region.amazonaws.com", "keepAlive" : 600 }, "runtime" : { "cgroup" : { "useSystemd" : "yes" } }, "managedRespawn" : false, "crypto": { "PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" }, "principals" : { "MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }, "IoTCertificate" : { "privateKeyPath" : "file:///greengrass/certs/hash.private.key", "certificatePath" : "file:///greengrass/certs/hash.cert.pem" }, "SecretsManager" : { "privateKeyPath" : "file:///greengrass/certs/hash.private.key" } }, "caPath" : "file:///greengrass/certs/root.ca.pem" } }
    注意

    要使用具有硬件安全性的 over-the-air (OTA) 更新,PKCS11对象还必须包含OpenSSLEngine属性。有关更多信息,请参阅 配置对 over-the-air更新的支持

  6. 编辑 crypto 数据:

    1. 配置 PKCS11 对象。

      • 对于 P11Provider,输入 libsofthsm2.so 的完整路径。

      • 对于 slotLabel,输入 greengrass

      • 对于 slotUserPin,输入 1234

    2. principals 对象中配置私有密钥路径。请勿编辑 certificatePath 属性。

      • 对于 privateKeyPath 属性,请输入以下 RFC 7512 PKCS#11 路径(指定键的标签)。对 IoTCertificateSecretsManagerMQTTServerCertificate 委托人执行此操作。

        pkcs11:object=iotkey;type=private
    3. 检查 crypto 对象。如下所示:

      "crypto": { "PKCS11": { "P11Provider": "/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so", "slotLabel": "greengrass", "slotUserPin": "1234" }, "principals": { "MQTTServerCertificate": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "SecretsManager": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "IoTCertificate": { "certificatePath": "file://certs/core.crt", "privateKeyPath": "pkcs11:object=iotkey;type=private" } }, "caPath": "file://certs/root.ca.pem" }
  7. coreThing 对象中删除 caPathcertPathkeyPath。如下所示:

    "coreThing" : { "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name", "iotHost" : "host-prefix-ats.iot.region.amazonaws.com", "ggHost" : "greengrass-ats.iot.region.amazonaws.com", "keepAlive" : 600 }
注意

在本教程中,您将为所有委托人指定相同的私有密钥。有关为本地 MQTT 服务器选择私有密钥的更多信息,请参阅性能。有关本地 Secrets Manager 的更多信息,请参阅将机密部署到核 AWS IoT Greengrass 心

测试配置

  • 启动 Greengrass 守护程序。

    cd /greengrass/ggc/core/ sudo ./greengrassd start

    如果守护程序成功启动,则您的核心已正确配置。

    现在已准备就绪,可以了解 PKCS#11 规范并使用 SoftHSM 实现提供的 PKCS#11 API 进行初始测试。

    重要

    重申一遍,必须注意此模块仅用于学习和测试,这一点非常重要。它不会实际改善您的 Greengrass 环境的安全状况。

    该模块的目的是使您能够开始学习和测试,以便为将来使用真正的基于硬件的 HSM 做准备。那时,您必须在开始任何生产用途之前,针对基于硬件的 HSM 单独全面地测试您的软件,因为 SoftHSM 中提供的 PKCS#11 实施与基于硬件的实施之间可能存在差异。

另请参阅

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。