

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 硬件安全性集成
<a name="hardware-security"></a>

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

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

在[AWS Partner 设备目录](https://devices.amazonaws.com/search?kw=%22HSI%22&page=1)中搜索符合此功能条件的设备。

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

![\[AWS IoT Greengrass Core architecture with hardware security and message routing to AWS IoT Core and local devices.\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/hardware-security-arch.png)


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

**注意**  
对于标准安装，本地 Secrets Manager 还对其加密过程使用 IoT 客户端密钥，但您可以使用您自己的私有密钥。它必须是最小长度为 2048 位的 RSA 密钥。有关更多信息，请参阅 [指定用于密钥加密的私有密钥](secrets.md#secrets-config-private-key)。

## 要求
<a name="hardware-security-reqs"></a>

在为 Greengrass 核心配置硬件安全性之前，您必须具备以下对象：
+ 一个硬件安全模块 (HSM)，可支持您的用于 IoT 客户端、本地 MQTT 服务器和本地 Secrets Manager 组件的目标私有密钥配置。该配置可以包含一个、两个或三个基于硬件的私有密钥，具体取决于您是否配置组件共享密钥。有关私有密钥支持的更多信息，请参阅 [AWS IoT Greengrass 核心安全主体](gg-sec.md#gg-principals)。
  + 对于 RSA 密钥：RSA-2048 密钥大小（或更大）和 [PKCS \$1 1 1.5 版本](#hardware-security-see-also)签名方案。
  + 对于 EC 密钥：NIST P-256 或 NIST P-384 曲线。
**注意**  
在[AWS Partner 设备目录](https://devices.amazonaws.com/search?kw=%22HSI%22&page=1)中搜索符合此功能条件的设备。
+ 一个 PKCS\$111 提供程序库，可在运行时加载（使用 libdl）并提供 [PKCS\$111](#hardware-security-see-also) 函数。
+ 硬件模块必须可按槽标签解析，如 PKCS\$111 规范所定义。
+ 私有密钥必须使用供应商提供的预配置工具在 HSM 上生成和加载。
+ 私有密钥必须由对象标签来解析。
+ 核心设备证书。这是与私有密钥对应的 IoT 客户端证书。
+ 如果使用的是 Greengrass OTA 更新代理，则必须安装 [OpenSSL libp11 PKCS\$111](https://github.com/OpenSC/libp11) 包装程序库。有关更多信息，请参阅 [配置对 over-the-air更新的支持](#hardware-security-ota-updates)。

此外，确保满足以下条件：
+ 与私钥关联的 IoT 客户端证书已在中注册 AWS IoT 并激活。你可以在 AWS IoT 控制台的 “**管理” 下进行**验证，展开 “**所有设备**”，选择 “**事物**”，然后为核心内容选择 “**证书**” 选项卡。
+  AWS IoT Greengrass 核心软件 v1.7 或更高版本安装在核心设备上，如入门教程的[模块 2](module2.md) 中所述。对 MQTT 服务器使用 EC 密钥需要 1.9 或更高版本。
+ 将证书附加到 Greengrass 核心。您可以从 AWS IoT 控制台的核心内容的 “**管理**” 页面进行验证。

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

## 内 AWS IoT Greengrass 核的硬件安全配置
<a name="configure-hardware-security"></a>

硬件安全性在 Greengrass 配置文件中进行配置。这是 [`config.json`](gg-core.md#config-json) 文件（位于 `/greengrass-root/config` 目录中）。

**注意**  
要演练使用纯软件实施来设置 HSM 配置的过程，请参阅 [模块 7：模拟硬件安全集成](console-mod7.md)。  
示例中的模拟配置不提供任何安全优势。它只是让您了解 PKCS\$111 规范，并在将来计划使用基于硬件的 HSM 时对软件进行初始测试。

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

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

```
"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`。  确保您的[终端节点与证书类型对应](gg-core.md#certificate-endpoints)。   | 
| `PKCS11` | 
| --- |
| OpenSSLEngine |  可选。OpenSSL 引擎 `.so` 文件（用于在 OpenSSL 上启用 PKCS \$1 11 支持）的绝对路径。  |  必须是文件系统上的文件的路径。 如果您使用 Greengrass OTA 更新代理来实现硬件安全性，则此属性是必需的。有关更多信息，请参阅 [配置对 over-the-air更新的支持](#hardware-security-ota-updates)。  | 
| P11Provider |  PKCS\$111 实施的 libdl-loadable 库的绝对路径。  |  必须是文件系统上的文件的路径。  | 
| slotLabel |  用于标识硬件模块的槽标签。  |  必须符合 PKCS \$1 11 标签规范。  | 
| slotUserPin |  用于对模块的 Greengrass 核心进行身份验证的用户 PIN。  |  必须具有足够的权限才能使用配置的私有密钥执行 C\$1Sign。  | 
| `principals` | 
| --- |
| IoTCertificate | 核心用于向 AWS IoT发出请求的证书和私有密钥。 | 
| IoTCertificate  .privateKeyPath  |  核心私有密钥的路径。  |  对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。  | 
| IoTCertificate  .certificatePath |  核心设备证书的绝对路径。  |  必须为以下格式的文件 URI：`file:///absolute/path/to/file`。  | 
| MQTTServerCertificate |  可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。  | 
| MQTTServerCertificate  .privateKeyPath |  本地 MQTT 服务器私有密钥的路径。  |  使用此值为本地 MQTT 服务器指定您自己的私有密钥。 对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。 如果省略此属性，则根据您的 AWS IoT Greengrass 旋转设置旋转密钥。如果指定，客户将负责对密钥进行轮换。  | 
| SecretsManager | 保护用于加密的数据密钥的私有密钥。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。 | 
| SecretsManager  .privateKeyPath |  本地 Secrets Manager 私有密钥的路径。  |  仅支持 RSA 密钥。 对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。必须使用 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 填充机制生成私有密钥。  | 


| 字段 | 描述 | 注意 | 
| --- |--- |--- |
| caPath |   AWS IoT 根 CA 的绝对路径。  |  必须为以下格式的文件 URI：`file:///absolute/path/to/file`。  确保您的[终端节点与证书类型对应](gg-core.md#certificate-endpoints)。   | 
| `PKCS11` | 
| --- |
| OpenSSLEngine |  可选。OpenSSL 引擎 `.so` 文件（用于在 OpenSSL 上启用 PKCS \$1 11 支持）的绝对路径。  |  必须是文件系统上的文件的路径。 如果您使用 Greengrass OTA 更新代理来实现硬件安全性，则此属性是必需的。有关更多信息，请参阅 [配置对 over-the-air更新的支持](#hardware-security-ota-updates)。  | 
| P11Provider |  PKCS\$111 实施的 libdl-loadable 库的绝对路径。  |  必须是文件系统上的文件的路径。  | 
| slotLabel |  用于标识硬件模块的槽标签。  |  必须符合 PKCS \$1 11 标签规范。  | 
| slotUserPin |  用于对模块的 Greengrass 核心进行身份验证的用户 PIN。  |  必须具有足够的权限才能使用配置的私有密钥执行 C\$1Sign。  | 
| `principals` | 
| --- |
| IoTCertificate | 核心用于向 AWS IoT发出请求的证书和私有密钥。 | 
| IoTCertificate  .privateKeyPath  |  核心私有密钥的路径。  |  对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。  | 
| IoTCertificate  .certificatePath |  核心设备证书的绝对路径。  |  必须为以下格式的文件 URI：`file:///absolute/path/to/file`。  | 
| MQTTServerCertificate |  可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。  | 
| MQTTServerCertificate  .privateKeyPath |  本地 MQTT 服务器私有密钥的路径。  |  使用此值为本地 MQTT 服务器指定您自己的私有密钥。 对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。 如果省略此属性，则根据您的 AWS IoT Greengrass 旋转设置旋转密钥。如果指定，客户将负责对密钥进行轮换。  | 
| SecretsManager | 保护用于加密的数据密钥的私有密钥。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。 | 
| SecretsManager  .privateKeyPath |  本地 Secrets Manager 私有密钥的路径。  |  仅支持 RSA 密钥。 对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。必须使用 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 填充机制生成私有密钥。  | 


| 字段 | 描述 | 注意 | 
| --- |--- |--- |
| caPath |   AWS IoT 根 CA 的绝对路径。  |  必须为以下格式的文件 URI：`file:///absolute/path/to/file`。  确保您的[终端节点与证书类型对应](gg-core.md#certificate-endpoints)。   | 
| `PKCS11` | 
| --- |
| OpenSSLEngine |  可选。OpenSSL 引擎 `.so` 文件（用于在 OpenSSL 上启用 PKCS \$1 11 支持）的绝对路径。  |  必须是文件系统上的文件的路径。 如果您使用 Greengrass OTA 更新代理来实现硬件安全性，则此属性是必需的。有关更多信息，请参阅 [配置对 over-the-air更新的支持](#hardware-security-ota-updates)。  | 
| P11Provider |  PKCS\$111 实施的 libdl-loadable 库的绝对路径。  |  必须是文件系统上的文件的路径。  | 
| slotLabel |  用于标识硬件模块的槽标签。  |  必须符合 PKCS \$1 11 标签规范。  | 
| slotUserPin |  用于对模块的 Greengrass 核心进行身份验证的用户 PIN。  |  必须具有足够的权限才能使用配置的私有密钥执行 C\$1Sign。  | 
| `principals` | 
| --- |
| IoTCertificate | 核心用于向 AWS IoT发出请求的证书和私有密钥。 | 
| IoTCertificate  .privateKeyPath  |  核心私有密钥的路径。  |  对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。  | 
| IoTCertificate  .certificatePath |  核心设备证书的绝对路径。  |  必须为以下格式的文件 URI：`file:///absolute/path/to/file`。  | 
| MQTTServerCertificate |  可选。核心为充当 MQTT 服务器或网关而将其证书结合使用的私有密钥。  | 
| MQTTServerCertificate  .privateKeyPath |  本地 MQTT 服务器私有密钥的路径。  |  使用此值为本地 MQTT 服务器指定您自己的私有密钥。 对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。 如果省略此属性，则根据您的 AWS IoT Greengrass 旋转设置旋转密钥。如果指定，客户将负责对密钥进行轮换。  | 
| SecretsManager | 保护用于加密的数据密钥的私有密钥。有关更多信息，请参阅 [将机密部署到核 AWS IoT Greengrass 心](secrets.md)。 | 
| SecretsManager  .privateKeyPath |  本地 Secrets Manager 私有密钥的路径。  |  仅支持 RSA 密钥。 对于文件系统存储，必须为以下格式的文件 URI：`file:///absolute/path/to/file`。 对于 HSM 存储，必须是指定对象标签的 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) 路径。必须使用 [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) 填充机制生成私有密钥。  | 

## AWS IoT Greengrass 硬件安全的配置实践
<a name="optional-provisioning"></a>

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

**安全性**  
  
+ 使用内部硬件随机数字生成器直接在 HSM 上生成私有密钥。
**注意**  
[如果您配置私钥以使用此功能（按照硬件供应商提供的说明进行操作），请注意 AWS IoT Greengrass 目前仅支持 PKCS1 v1.5 填充机制来加密和解密本地机密。](secrets.md) AWS IoT Greengrass 不支持最佳非对称加密填充 (OAEP)。
+ 配置私有密钥以禁止导出。
+ 使用硬件供应商提供的配置工具，使用受硬件保护的私钥生成证书签名请求 (CSR)，然后使用 AWS IoT 控制台生成客户端证书。
在 HSM 上生成私有密钥时，轮换密钥的做法并不适用。

**性能**  <a name="hsm-performance"></a>
下图显示了 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.\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/multi-key-diagram.png)

通常，物联网客户端密钥的使用频率不高，因为 AWS IoT Greengrass 核心软件与云保持着长期的连接。但是，每当 Greengrass 设备连接到核心时，都会使用 MQTT 服务器密钥。这些交互直接影响着性能。  
当 MQTT 服务器密钥存储在 HSM 中时，设备连接的速度取决于 HSM 每秒能够执行的 RSA 签名操作数量。例如，如果 HSM 需要 300 毫秒在 RSA-2048 私钥上执行 RSASS PKCS1 A--v1.5 签名，则每秒只有三台设备可以连接到 Greengrass 内核。连接完成后，将不再使用 HSM，并且会应用标准 [AWS IoT Greengrass配额](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass)。  
为了消除性能瓶颈，您可以将 MQTT 服务器的私有密钥存储在文件系统上，而不是 HSM 上。通过这种配置，MQTT 服务器的行为就好像未启用硬件安全性一样。  
AWS IoT Greengrass 支持 IoT 客户端和 MQTT 服务器组件的多种密钥存储配置，因此您可以根据自己的安全和性能要求进行优化。下表包含一些示例配置。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/hardware-security.html)
要将 Greengrass 核心配置为在 MQTT 服务器上使用基于文件系统的密钥，请省略`principals.MQTTServerCertificate`该部分（如果您不使用生`config.json`成的默认密钥，则指定密钥的基于文件的路径）。 AWS IoT Greengrass生成的 `crypto` 对象如下所示：  

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

## 硬件安全性集成支持的密码套件
<a name="cipher-suites-for-hsm"></a>

AWS IoT Greengrass 当内核配置为硬件安全时，支持一组密码套件。这是在配置核心以使用基于文件的安全性时所支持的密码套件的一部分。有关更多信息，请参阅 [TLS 密码套件支持](gg-sec.md#gg-cipher-suites)。

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

## 配置对 over-the-air更新的支持
<a name="hardware-security-ota-updates"></a>

要在使用硬件安全时启用 C AWS IoT Greengrass ore 软件的 over-the-air (OTA) 更新，必须安装 OpenSC libp11 P [KCS \$111 包装器库并](https://github.com/OpenSC/libp11)编辑 Greengrass 配置文件。有关 OTA 更新的更多信息，请参阅 [AWS IoT Greengrass 核心软件的 OTA 更新](core-ota-update.md)。

1. 停止 Greengrass 守护程序。

   ```
   cd /greengrass-root/ggc/core/
   sudo ./greengrassd stop
   ```
**注意**  
*greengrass-root*表示 C AWS IoT Greengrass ore 软件在您的设备上的安装路径。通常，这是 `/greengrass` 目录。

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

   ```
   sudo apt-get install libengine-pkcs11-openssl
   ```

1. 在您的系统上找到 OpenSSL 引擎的路径 (`libpkcs11.so`)：

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

      ```
      sudo dpkg -L libengine-pkcs11-openssl
      ```

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

   1. 复制文件的完整路径（例如 `/usr/lib/ssl/engines/libpkcs11.so`）。

1. 打开 Greengrass 配置文件。这是位于 `/greengrass-root/config` 目录中的 [`config.json`](gg-core.md#config-json) 文件。

1. 对于 `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` 属性，请进行添加。

1. 启动 Greengrass 守护程序。

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

## 向后兼容早期版本的 AWS IoT Greengrass 核心软件
<a name="hardware-security-backward-compatibiity"></a>

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

## 不具有 PKCS\$111 支持的硬件
<a name="hardware-without-pkcs11"></a>

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

## 另请参阅
<a name="hardware-security-see-also"></a>
+ *PKCS \$111 加密令牌接口使用指南 2.40 版本*。编辑者：John Leiseboer 和 Robert Griffin。2014 年 11 月 16 日。OASIS 委员会备注 02。 [http://docs.oasis-open。 org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.h](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html) tml。最新版本：[http://docs.oasis-open。 org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.h](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html) tml。
+ [RFC 7512](https://tools.ietf.org/html/rfc7512)
+ [PKCS \$11：RSA 加密版本 1.5](https://tools.ietf.org/html/rfc2313)