

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

# PKCS\#11 提供程序
<a name="pkcs11-provider-component"></a>

PKCS \#11 提供程序组件 (`aws.greengrass.crypto.Pkcs11Provider`) 使您可以通过 [PKCS \#11 接口](https://en.wikipedia.org/wiki/PKCS_11)将 AWS IoT Greengrass Core 软件配置为使用硬件安全模块（HSM）。此组件使您能够安全地存储证书和私钥文件，这样它们就不会在软件中暴露或复制。有关更多信息，请参阅 [硬件安全性集成](hardware-security.md)。

**注意**  
这个组件只是 [Greengrass](greengrass-nucleus-component.md) 原子核所必需的。[Greengrass nucleus](greengrass-nucleus-lite-component.md) lite v2.5.0 及更高版本包括内置的 PKCS \#11 支持，不需要这个组件。有关更多信息，请参阅 nuc AWS IoT Greengrass leus lite GitHub 存储库中的 [PKCS \#11 支持](https://github.com/aws-greengrass/aws-greengrass-lite/blob/main/docs/PKCS11_SUPPORT.md)。

要配置在 HSM 中存储其证书和私钥的 Greengrass 核心设备，您必须在安装 Core 软件时将此组件指定为配置插件。 AWS IoT Greengrass 有关更多信息，请参阅 [使用手动资源配置来安装 AWS IoT Greengrass Core 软件](manual-installation.md)。

AWS IoT Greengrass 将此组件作为 JAR 文件提供，您可以下载该文件，以便在安装过程中将其指定为预配插件。您可以通过以下 URL 下载该组件 JAR 文件的最新版本：[https://d2s8p88vqu9w66.cloudfront。 net/releases/Pkcs11Provider/aws.greengrass.crypto.pkcs11Provider](https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar)-latest.jar。

**Topics**
+ [版本](#pkcs11-provider-component-versions)
+ [Type](#pkcs11-provider-component-type)
+ [操作系统](#pkcs11-provider-component-os-support)
+ [要求](#pkcs11-provider-component-requirements)
+ [依赖项](#pkcs11-provider-component-dependencies)
+ [配置](#pkcs11-provider-component-configuration)
+ [本地日志文件](#pkcs11-provider-component-log-file)
+ [更改日志](#pkcs11-provider-component-changelog)

## 版本
<a name="pkcs11-provider-component-versions"></a>

此组件具有以下版本：
+ 2.0.x

## Type
<a name="pkcs11-provider-component-type"></a>

<a name="public-component-type-plugin-para1"></a>此组件是一个插件组件 (`aws.greengrass.plugin`)。[Greengrass Nucleus](greengrass-nucleus-component.md) 在与该 Nucleus 相同的 Java 虚拟机（JVM）中运行该组件。当您在核心设备上更改此组件的版本时，Nucleus 会重新启动。

<a name="public-component-type-plugin-para2"></a>此组件使用与 Greengrass Nucleus 相同的日志文件。有关更多信息，请参阅 [监控 AWS IoT Greengrass 日志](monitor-logs.md)。

<a name="public-component-type-more-information"></a>有关更多信息，请参阅 [组件类型](develop-greengrass-components.md#component-types)。

## 操作系统
<a name="pkcs11-provider-component-os-support"></a>

此组件只能安装在 Linux 核心设备上。

## 要求
<a name="pkcs11-provider-component-requirements"></a>

此组件具有以下要求：
+ <a name="hardware-security-module-requirements-key"></a>支持 [PKCS\#1 v1.5](https://tools.ietf.org/html/rfc2313) 签名方案和 RSA-2048 密钥大小（或更大）的 RSA 密钥或 ECC 密钥的硬件安全模块。
**注意**  <a name="hardware-security-module-requirements-key-notes"></a>
要使用带 ECC 密钥的硬件安全模块，必须使用 [Greengrass Nucleus](greengrass-nucleus-component.md) v2.5.6 或更高版本。  
要使用硬件安全模块和[密钥管理器](secret-manager-component.md)，必须使用带 RSA 密钥的硬件安全模块。
+ <a name="hardware-security-module-requirements-pkcs11-provider-library"></a>一个 PKCS \#11 提供程序库， AWS IoT Greengrass 核心软件可以在运行时加载该库（使用 libdl）来调用 PKCS \#11 函数。PKCS\#11 提供程序库必须实施以下 PKCS\#11 API 操作：
  + `C_Initialize`
  + `C_Finalize`
  + `C_GetSlotList`
  + `C_GetSlotInfo`
  + `C_GetTokenInfo`
  + `C_OpenSession`
  + `C_GetSessionInfo`
  + `C_CloseSession`
  + `C_Login`
  + `C_Logout`
  + `C_GetAttributeValue`
  + `C_FindObjectsInit`
  + `C_FindObjects`
  + `C_FindObjectsFinal`
  + `C_DecryptInit`
  + `C_Decrypt`
  + `C_DecryptUpdate`
  + `C_DecryptFinal`
  + `C_SignInit`
  + `C_Sign`
  + `C_SignUpdate`
  + `C_SignFinal`
  + `C_GetMechanismList`
  + `C_GetMechanismInfo`
  + `C_GetInfo`
  + `C_GetFunctionList`
+ <a name="hardware-security-module-requirements-slot-label"></a>硬件模块必须可按槽标签解析，如 PKCS\#11 规范所定义。
+ <a name="hardware-security-module-requirements-private-key-and-certificate"></a>如果 HSM 支持对象，则必须将私钥和证书存储在 HSM 的同一个插槽中，并且它们必须使用相同的对象标签和对象 ID。 IDs
+ <a name="hardware-security-module-requirements-object-label"></a>证书和私有密钥必须由对象标签来解析。
+ <a name="hardware-security-module-requirements-private-key-permissions"></a>私有密钥必须具有以下权限：
  + `sign`
  + `decrypt`
+ <a name="hardware-security-module-requirements-secret-manager-permissions"></a>（可选）要使用[密钥管理器组件](secret-manager-component.md)，必须使用 2.1.0 或更高版本，并且私有密钥必须具有以下权限：
  + `unwrap`
  + `wrap`
+ <a name="hardware-security-module-requirements-environment-variable"></a>（可选）如果您使用 TPM2 库并将 Greengrass 核心作为服务运行，则必须提供一个包含 PKCS \#11 存储位置的环境变量。以下示例是具有所需环境变量的 systemd 服务文件：

  ```
  [Unit]
  Description=Greengrass Core
  After=network.target
  
  [Service]
  Type=simple
  PIDFile=/var/run/greengrass.pid
  Environment=TPM2_PKCS11_STORE={{/path/to/store/directory}}
  RemainAfterExit=no
  Restart=on-failure
  RestartSec=10
  ExecStart=/bin/sh /greengrass/v2/alts/current/distro/bin/loader
  
  [Install]
  WantedBy=multi-user.target
  ```

## 依赖项
<a name="pkcs11-provider-component-dependencies"></a>

部署组件时， AWS IoT Greengrass 还会部署其依赖项的兼容版本。这意味着您必须满足组件及其所有依赖关系的要求，才能成功部署组件。本部分列出了此组件的[已发布版本](#pkcs11-provider-component-changelog)的依赖关系，以及定义每个依赖关系的组件版本的语义版本约束。您还可以在 [AWS IoT Greengrass 控制台](https://console.aws.amazon.com//greengrass)中查看每个组件版本的依赖关系。在组件详细信息页面上，查找**依赖关系**列表。

------
#### [ 2.0.11 ]

下表列出了此组件的版本 2.0.11 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.17.0 | 软性 | 

------
#### [ 2.0.10 ]

下表列出了此组件的版本 2.0.10 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.16.0  | 软性 | 

------
#### [ 2.0.9 ]

下表列出了此组件的版本 2.0.9 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.15.0  | 软性 | 

------
#### [ 2.0.8 ]

下表列出了此组件的版本 2.0.8 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.14.0  | 软性 | 

------
#### [ 2.0.7 ]

下表列出了此组件的版本 2.0.7 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.13.0  | 软性 | 

------
#### [ 2.0.6 ]

下表列出了此组件的版本 2.0.6 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.12.0  | 软性 | 

------
#### [ 2.0.5 ]

下表列出了此组件的版本 2.0.5 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.11.0  | 软性 | 

------
#### [ 2.0.4 ]

下表列出了此组件的版本 2.0.4 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.10.0  | 软性 | 

------
#### [ 2.0.3 ]

下表列出了此组件的版本 2.0.3 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.9.0  | 软性 | 

------
#### [ 2.0.2 ]

下表列出了此组件的版本 2.0.2 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) | >=2.5.3 <2.8.0  | 软性 | 

------
#### [ 2.0.1 ]

下表列出了此组件的版本 2.0.1 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) |  >=2.5.3 <2.7.0  | 软性 | 

------
#### [ 2.0.0 ]

下表列出了此组件版本 2.0.0 的依赖关系。


| 依赖关系 | 兼容版本 | 依赖关系类型 | 
| --- | --- | --- | 
| [Greengrass Nucleus](greengrass-nucleus-component.md) |  >=2.5.3 <2.6.0  | 软性 | 

------

有关组件依赖关系的更多信息，请参阅[组件配方参考](component-recipe-reference.md#recipe-reference-component-dependencies)。

## 配置
<a name="pkcs11-provider-component-configuration"></a>

此组件提供您可以在部署组件时自定义的以下配置参数。<a name="pkcs11-provider-component-configuration-parameters"></a>

`name`  
PKCS\#11 配置的名称。

`library`  
 AWS IoT Greengrass 核心软件可以使用 libdl 加载的 PKCS \#11 实现库的绝对文件路径。

`slot`  
包含私有密钥和设备证书的槽的 ID。此值不同于槽索引或槽标签。

`userPin`  
用于访问该槽的用户 PIN。

**Example 示例：配置合并更新**  

```
{
  "name": "softhsm_pkcs11",
  "library": "/usr/lib/softhsm/libsofthsm2.so",
  "slot": 1,
  "userPin": "1234"
}
```

## 本地日志文件
<a name="pkcs11-provider-component-log-file"></a>

此组件使用与 [Greengrass Nucleus](greengrass-nucleus-component.md) 组件相同的日志文件。

------
#### [ Linux ]

```
{{/greengrass/v2}}/logs/greengrass.log
```

------
#### [ Windows ]

```
{{C:\greengrass\v2}}\logs\greengrass.log
```

------

**查看此组件的日志**
+ 在核心设备上运行以下命令可实时查看此组件的日志文件。将`{{/greengrass/v2}}`或{{C:\\greengrass\\v2}}替换为 AWS IoT Greengrass 根文件夹的路径。

------
#### [ Linux ]

  ```
  sudo tail -f {{/greengrass/v2}}/logs/greengrass.log
  ```

------
#### [ Windows (PowerShell) ]

  ```
  Get-Content {{C:\greengrass\v2}}\logs\greengrass.log -Tail 10 -Wait
  ```

------

## 更改日志
<a name="pkcs11-provider-component-changelog"></a>

下表介绍每个组件版本的更改。


|  **版本**  |  **更改**  | 
| --- | --- | 
| 2.0.12 | 更新 Greengrass nucleus 版本 2.17.0 版本的组件版本。 | 
| 2.0.11 | Greengrass nucleus 版本 2.16.0 版本的版本已更新。 | 
| 2.0.10 | Greengrass nucleus 版本 2.15.0 版本的版本已更新。 | 
| 2.0.9 | Greengrass nucleus 版本 2.14.0 版本的版本已更新。 | 
| 2.0.8 | 对 Greengrass Nucleus 版本 2.13.0 发行版进行了版本更新。 | 
| 2.0.7 | 版本更新为 Greengrass Nucleus 版本 2.12.0 发布版。 | 
| 2.0.6 | 版本更新为 Greengrass Nucleus 版本 2.11.0 发布版。 | 
| 2.0.5 | 版本更新为 Greengrass Nucleus 版本 2.10.0 发布版。 | 
| 2.0.4 | 对 Greengrass Nucleus版本 2.9.0 发行版进行了版本更新。 | 
| 2.0.3 | 版本更新为 Greengrass Nucleus 版本 2.8.0 发布版。 | 
| 2.0.2 | 版本更新为 Greengrass Nucleus 版本 2.7.0 发布版。 | 
| 2.0.1 | 版本更新为 Greengrass Nucleus 版本 2.6.0 发布版。 | 
| 2.0.0 | 初始版本。 | 