选择您的 Cookie 首选项

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

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

硬件安全性集成 - 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 及更高版本。

AWS IoT Greengrass 支持通过 PKCS #11 接口使用硬件安全模块 (HSM) 来安全存储和卸载私钥。这样可防止密钥在软件中暴露或重复。私钥可以安全地存储在硬件模块上 HSMs,例如可信平台模块 (TPM) 或其他加密元素。

AWS Partner 设备目录中搜索符合此功能条件的设备。

下图显示了内 AWS IoT Greengrass 核的硬件安全架构。

AWS IoT Greengrass Core architecture with hardware security and message routing to AWS IoT Core and local devices.

在标准安装中, AWS IoT Greengrass 使用两个私钥。Greengrass 内核连接时,客户 AWS IoT 端(物联网客户端)组件在传输层安全 (TLS) 握手期间使用一个密钥。 AWS IoT Core(此密钥也称为核心私有密钥。) 另一个密钥由本地 MQTT 服务器使用,它使 Greengrass 设备能够与 Greengrass 核心进行通信。如果您要为这两个组件使用硬件安全性,可以使用共享私有密钥或单独的私有密钥。有关更多信息,请参阅 AWS IoT Greengrass 硬件安全的配置实践

注意

对于标准安装,本地 Secrets Manager 还对其加密过程使用 IoT 客户端密钥,但您可以使用您自己的私有密钥。它必须是最小长度为 2048 位的 RSA 密钥。有关更多信息,请参阅 指定用于密钥加密的私有密钥

要求

在为 Greengrass 核心配置硬件安全性之前,您必须具备以下对象:

  • 一个硬件安全模块 (HSM),可支持您的用于 IoT 客户端、本地 MQTT 服务器和本地 Secrets Manager 组件的目标私有密钥配置。该配置可以包含一个、两个或三个基于硬件的私有密钥,具体取决于您是否配置组件共享密钥。有关私有密钥支持的更多信息,请参阅 AWS IoT Greengrass 核心安全主体

    • 对于 RSA 密钥:RSA-2048 密钥大小(或更大)和 PKCS # 1 1.5 版本签名方案。

    • 对于 EC 密钥:NIST P-256 或 NIST P-384 曲线。

    注意

    AWS Partner 设备目录中搜索符合此功能条件的设备。

  • 一个 PKCS#11 提供程序库,可在运行时加载(使用 libdl)并提供 PKCS#11 函数。

  • 硬件模块必须可按槽标签解析,如 PKCS#11 规范所定义。

  • 私有密钥必须使用供应商提供的预配置工具在 HSM 上生成和加载。

  • 私有密钥必须由对象标签来解析。

  • 核心设备证书。这是与私有密钥对应的 IoT 客户端证书。

  • 如果使用的是 Greengrass OTA 更新代理,则必须安装 OpenSSL libp11 PKCS#11 包装程序库。有关更多信息,请参阅 配置对 over-the-air更新的支持

此外,确保满足以下条件:

  • 与私钥关联的 IoT 客户端证书已在中注册 AWS IoT 并激活。你可以在 AWS IoT 控制台的 “管理” 下进行验证,展开 “所有设备”,选择 “事物”,然后为核心内容选择 “证书” 选项卡。

  • AWS IoT Greengrass 核心软件 v1.7 或更高版本安装在核心设备上,如入门教程的模块 2 中所述。对 MQTT 服务器使用 EC 密钥需要 1.9 或更高版本。

  • 将证书附加到 Greengrass 核心。您可以从 AWS IoT 控制台的核心内容的 “管理” 页面进行验证。

注意

目前, AWS IoT Greengrass 不支持直接从 HSM 加载 CA 证书或 IoT 客户端证书。证书必须以纯文本文件形式加载到文件系统中 Greengrass 可读取的位置。

内 AWS IoT Greengrass 核的硬件安全配置

硬件安全性在 Greengrass 配置文件中进行配置。这是 config.json 文件(位于 /greengrass-root/config 目录中)。

注意

要演练使用纯软件实施来设置 HSM 配置的过程,请参阅 模块 7:模拟硬件安全集成

重要

示例中的模拟配置不提供任何安全优势。它只是让您了解 PKCS#11 规范,并在将来计划使用基于硬件的 HSM 时对软件进行初始测试。

要在中配置硬件安全 AWS IoT Greengrass,请在中编辑crypto对象config.json

使用硬件安全性时,crypto 对象用于在核心上为 PKCS#11 提供程序库指定证书、私有密钥和资产的路径,如以下示例所示。

"crypto": { "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, "principals" : { "IoTCertificate" : { "privateKeyPath" : "pkcs11:object=core-private-key-label;type=private", "certificatePath" : "file:///path-to-core-device-certificate" }, "MQTTServerCertificate" : { "privateKeyPath" : "pkcs11:object=server-private-key-label;type=private" }, "SecretsManager" : { "privateKeyPath": "pkcs11:object=core-private-key-label;type=private" } }, "caPath" : "file:///path-to-root-ca"

crypto 对象包含以下属性:

字段 描述 备注
caPath

AWS IoT 根 CA 的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

PKCS11
OpenSSLEngine

可选。OpenSSL 引擎 .so 文件(用于在 OpenSSL 上启用 PKCS # 11 支持)的绝对路径。

必须是文件系统上的文件的路径。

如果您使用 Greengrass OTA 更新代理来实现硬件安全性,则此属性是必需的。有关更多信息,请参阅 配置对 over-the-air更新的支持

P11Provider

PKCS#11 实施的 libdl-loadable 库的绝对路径。

必须是文件系统上的文件的路径。

slotLabel

用于标识硬件模块的槽标签。

必须符合 PKCS # 11 标签规范。

slotUserPin

用于对模块的 Greengrass 核心进行身份验证的用户 PIN。

必须具有足够的权限才能使用配置的私有密钥执行 C_Sign。

principals
IoTCertificate 核心用于向 AWS IoT发出请求的证书和私有密钥。
IoTCertificate  .privateKeyPath

核心私有密钥的路径。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

IoTCertificate  .certificatePath

核心设备证书的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

MQTTServerCertificate

可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。

MQTTServerCertificate  .privateKeyPath

本地 MQTT 服务器私有密钥的路径。

使用此值为本地 MQTT 服务器指定您自己的私有密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

如果省略此属性,则根据您的 AWS IoT Greengrass 旋转设置旋转密钥。如果指定,客户将负责对密钥进行轮换。

SecretsManager 保护用于加密的数据密钥的私有密钥。有关更多信息,请参阅 将机密部署到核 AWS IoT Greengrass 心
SecretsManager  .privateKeyPath

本地 Secrets Manager 私有密钥的路径。

仅支持 RSA 密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。必须使用 PKCS#1 v1.5 填充机制生成私有密钥。

字段 描述 备注
caPath

AWS IoT 根 CA 的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

PKCS11
OpenSSLEngine

可选。OpenSSL 引擎 .so 文件(用于在 OpenSSL 上启用 PKCS # 11 支持)的绝对路径。

必须是文件系统上的文件的路径。

如果您使用 Greengrass OTA 更新代理来实现硬件安全性,则此属性是必需的。有关更多信息,请参阅 配置对 over-the-air更新的支持

P11Provider

PKCS#11 实施的 libdl-loadable 库的绝对路径。

必须是文件系统上的文件的路径。

slotLabel

用于标识硬件模块的槽标签。

必须符合 PKCS # 11 标签规范。

slotUserPin

用于对模块的 Greengrass 核心进行身份验证的用户 PIN。

必须具有足够的权限才能使用配置的私有密钥执行 C_Sign。

principals
IoTCertificate 核心用于向 AWS IoT发出请求的证书和私有密钥。
IoTCertificate  .privateKeyPath

核心私有密钥的路径。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

IoTCertificate  .certificatePath

核心设备证书的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

MQTTServerCertificate

可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。

MQTTServerCertificate  .privateKeyPath

本地 MQTT 服务器私有密钥的路径。

使用此值为本地 MQTT 服务器指定您自己的私有密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

如果省略此属性,则根据您的 AWS IoT Greengrass 旋转设置旋转密钥。如果指定,客户将负责对密钥进行轮换。

SecretsManager 保护用于加密的数据密钥的私有密钥。有关更多信息,请参阅 将机密部署到核 AWS IoT Greengrass 心
SecretsManager  .privateKeyPath

本地 Secrets Manager 私有密钥的路径。

仅支持 RSA 密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。必须使用 PKCS#1 v1.5 填充机制生成私有密钥。

字段 描述 备注
caPath

AWS IoT 根 CA 的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

PKCS11
OpenSSLEngine

可选。OpenSSL 引擎 .so 文件(用于在 OpenSSL 上启用 PKCS # 11 支持)的绝对路径。

必须是文件系统上的文件的路径。

如果您使用 Greengrass OTA 更新代理来实现硬件安全性,则此属性是必需的。有关更多信息,请参阅 配置对 over-the-air更新的支持

P11Provider

PKCS#11 实施的 libdl-loadable 库的绝对路径。

必须是文件系统上的文件的路径。

slotLabel

用于标识硬件模块的槽标签。

必须符合 PKCS # 11 标签规范。

slotUserPin

用于对模块的 Greengrass 核心进行身份验证的用户 PIN。

必须具有足够的权限才能使用配置的私有密钥执行 C_Sign。

principals
IoTCertificate 核心用于向 AWS IoT发出请求的证书和私有密钥。
IoTCertificate  .privateKeyPath

核心私有密钥的路径。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

IoTCertificate  .certificatePath

核心设备证书的绝对路径。

必须为以下格式的文件 URI:file:///absolute/path/to/file

MQTTServerCertificate

可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。

MQTTServerCertificate  .privateKeyPath

本地 MQTT 服务器私有密钥的路径。

使用此值为本地 MQTT 服务器指定您自己的私有密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。

如果省略此属性,则根据您的 AWS IoT Greengrass 旋转设置旋转密钥。如果指定,客户将负责对密钥进行轮换。

SecretsManager 保护用于加密的数据密钥的私有密钥。有关更多信息,请参阅 将机密部署到核 AWS IoT Greengrass 心
SecretsManager  .privateKeyPath

本地 Secrets Manager 私有密钥的路径。

仅支持 RSA 密钥。

对于文件系统存储,必须为以下格式的文件 URI:file:///absolute/path/to/file

对于 HSM 存储,必须是指定对象标签的 RFC 7512 PKCS#11 路径。必须使用 PKCS#1 v1.5 填充机制生成私有密钥。

AWS IoT Greengrass 硬件安全的配置实践

以下是安全性和性能相关的预配置实践。

安全性

注意

在 HSM 上生成私有密钥时,轮换密钥的做法并不适用。

性能

下图显示了 AWS IoT Greengrass 核心上的 IoT 客户端组件和本地 MQTT 服务器。如果您要为这两个组件使用 HSM 配置,可以使用相同的私有密钥或单独的私有密钥。如果您使用单独的密钥,则它们必须存储在相同的插槽中。

注意

AWS IoT Greengrass 不会对存储在 HSM 上的密钥数量施加任何限制,因此您可以存储物联网客户端、MQTT 服务器和机密管理器组件的私钥。但是,某些 HSM 供应商可能会对您可以存储在插槽中的密钥数量施加限制。

IoT client and MQTT server interacting with AWS IoT Greengrass Core and AWS IoT Core.

通常,物联网客户端密钥的使用频率不高,因为 AWS IoT Greengrass 核心软件与云保持着长期的连接。但是,每当 Greengrass 设备连接到核心时,都会使用 MQTT 服务器密钥。这些交互直接影响着性能。

当 MQTT 服务器密钥存储在 HSM 中时,设备连接的速度取决于 HSM 每秒能够执行的 RSA 签名操作数量。例如,如果 HSM 需要 300 毫秒在 RSA-2048 私钥上执行 RSASS PKCS1 A--v1.5 签名,则每秒只有三台设备可以连接到 Greengrass 内核。连接完成后,将不再使用 HSM,并且会应用标准 AWS IoT Greengrass配额

为了消除性能瓶颈,您可以将 MQTT 服务器的私有密钥存储在文件系统上,而不是 HSM 上。通过这种配置,MQTT 服务器的行为就好像未启用硬件安全性一样。

AWS IoT Greengrass 支持 IoT 客户端和 MQTT 服务器组件的多种密钥存储配置,因此您可以根据自己的安全和性能要求进行优化。下表包含一些示例配置。

配置 IoT 密钥 MQTT 密钥 性能
HSM 共享密钥 HSM:密钥 A HSM:密钥 A 受 HSM 或 CPU 限制
HSM 单独密钥 HSM:密钥 A HSM:密钥 B 受 HSM 或 CPU 限制
仅限适用于 IoT 的 HSM HSM:密钥 A 文件系统:密钥 B 受 CPU 限制
传统 文件系统:密钥 A 文件系统:密钥 B 受 CPU 限制

要将 Greengrass 核心配置为在 MQTT 服务器上使用基于文件系统的密钥,请省略principals.MQTTServerCertificate该部分(如果您不使用生config.json成的默认密钥,则指定密钥的基于文件的路径)。 AWS IoT Greengrass生成的 crypto 对象如下所示:

"crypto": { "PKCS11": { "OpenSSLEngine": "...", "P11Provider": "...", "slotLabel": "...", "slotUserPin": "..." }, "principals": { "IoTCertificate": { "privateKeyPath": "...", "certificatePath": "..." }, "SecretsManager": { "privateKeyPath": "..." } }, "caPath" : "..." }

硬件安全性集成支持的密码套件

AWS IoT Greengrass 当内核配置为硬件安全时,支持一组密码套件。这是在配置核心以使用基于文件的安全性时所支持的密码套件的一部分。有关更多信息,请参阅 TLS 密码套件支持

注意

当通过本地网络从 Greengrass 设备连接到 Greengrass 核心时,请确保使用一个受支持的加密套件来建立 TLS 连接。

配置对 over-the-air更新的支持

要在使用硬件安全时启用 C AWS IoT Greengrass ore 软件的 over-the-air (OTA) 更新,必须安装 OpenSC libp11 P KCS #11 包装器库并编辑 Greengrass 配置文件。有关 OTA 更新的更多信息,请参阅 AWS IoT Greengrass 核心软件的 OTA 更新

  1. 停止 Greengrass 守护程序。

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
    注意

    greengrass-root表示 C AWS IoT Greengrass ore 软件在您的设备上的安装路径。通常,这是 /greengrass 目录。

  2. 安装 OpenSSL 引擎。支持 OpenSSL 1.0 或 1.1。

    sudo apt-get install libengine-pkcs11-openssl
  3. 在您的系统上找到 OpenSSL 引擎的路径 (libpkcs11.so):

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

      sudo dpkg -L libengine-pkcs11-openssl

      libpkcs11.so 文件位于 engines 目录中。

    2. 复制文件的完整路径(例如 /usr/lib/ssl/engines/libpkcs11.so)。

  4. 打开 Greengrass 配置文件。这是位于 /greengrass-root/config 目录中的 config.json 文件。

  5. 对于 OpenSSLEngine 属性,输入 libpkcs11.so 文件的路径。

    { "crypto": { "caPath" : "file:///path-to-root-ca", "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, ... } ... }
    注意

    如果 PKCS11 对象中不存在 OpenSSLEngine 属性,请进行添加。

  6. 启动 Greengrass 守护程序。

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

向后兼容早期版本的 AWS IoT Greengrass 核心软件

支持硬件安全的 AWS IoT Greengrass Core 软件与为 v1.6 及更早版本生成的config.json文件完全向后兼容。如果config.json配置文件中不存在该crypto对象,则 AWS IoT Greengrass 使用基于文件的coreThing.certPathcoreThing.keyPath、和coreThing.caPath属性。此向后兼容性应用于 Greengrass OTA 更新,这不会覆盖 config.json 中指定的基于文件的配置。

不具有 PKCS#11 支持的硬件

PKCS#11 库通常由硬件供应商提供或是开源软件。例如,使用符合标准的硬件(例如 TPM1 .2),可能可以使用现有的开源软件。但是,如果您的硬件没有相应的 PKCS #11 库实现,或者您想编写自定义 PKCS #11 提供程序,则应联系您的 Enterprise Su AWS pport 代表以解决与集成相关的问题。

另请参阅

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