模块 7:模拟硬件安全集成 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南.

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

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

此功能适用于Amazon IoT GreengrassCore v1.7 及更高版本。

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

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

重要

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

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

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

如果您在加入支持的硬件安全模块,请联系您的Amazon企业 Support 代表。

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

安装 SoftHSM 软件

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

  • 在您的终端上的Amazon IoT Greengrass核心设备,请运行以下命令:

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

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

    注意

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

配置 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。Amazon 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 配置文件。这是config.json文件中的/greengrass/config目录。

    注意

    编写此过程中的示例时,假定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" } }
    注意

    要将无线 (OTA) 更新与硬件安全性结合使用,PKCS11 对象还必须包含 OpenSSLEngine 属性。有关更多信息,请参阅配置对无线更新的支持

  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 的更多信息,请参阅将密钥部署到 Amazon IoT Greengrass 核心

测试配置

  • 启动 Greengrass 守护程序。

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

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

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

    重要

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

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

另请参阅