本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
硬件安全性集成
注意
此功能适用于 Greengrass nucleus 组件的 2.5.3 及更高版本。 Amazon IoT Greengrass目前不支持在 Windows 核心设备上使用此功能。
您可以通过 PKCS #11
Amazon IoT GreengrassCore 软件使用私钥和 X.509 证书来验证与和服务的连接。Amazon IoT Amazon IoT Greengrass密钥管理器组件使用此私钥来安全地加密和解密您部署到 Greengrass 核心设备的机密。将核心设备配置为使用 HSM 时,这些组件使用您存储在 HSM 中的私钥和证书。
M oquette MQTT 代理组件还存储其本地 MQTT 服务器证书的私钥。此组件将设备文件系统上的私钥存储在组件的工作文件夹中。目前,Amazon IoT Greengrass不支持将此私钥或证书存储在 HSM 中。
要求
要在 Greengrass 核心设备上使用 HSM,您必须满足以下要求:
-
Greengrass nucleus v2.5.3 或更高版本安装在核心设备上。在Amazon IoT Greengrass核心设备上安装酷睿软件时,可以选择兼容版本。
-
安装在核心设备上的 PKCS #11 提供程序组件。在Amazon IoT Greengrass核心设备上安装 Core 软件时,可以下载并安装此组件。
-
一种硬件安全模块,支持 PKCS #1 v1.5
签名方案和密钥大小为 RSA-2048(或更大)或 ECC 密钥的 RSA 密钥。 注意
要使用带有 ECC 密钥的硬件安全模块,必须使用 Greengrass nucleus v2.5.6 或更高版本。
要使用硬件安全模块和密钥管理器,必须使用带有 RSA 密钥的硬件安全模块。
-
一个 PKCS #11 提供程序库,Amazon 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
-
-
硬件模块必须可按槽标签解析,如 PKCS#11 规范所定义。
-
如果 HSM 支持对象 ID,则必须将私钥和证书存储在 HSM 的同一个插槽中,并且它们必须使用相同的对象标签和对象 ID。
-
证书和私钥必须可通过对象标签进行解析。
-
私钥必须具有以下权限:
-
sign
-
decrypt
-
-
(可选)要使用密钥管理器组件,必须使用 2.1.0 或更高版本,并且私钥必须具有以下权限:
-
unwrap
-
wrap
-
硬件安全最佳实践
在 Greengrass 核心设备上配置硬件安全时,请考虑以下最佳实践。
-
使用内部硬件随机数字生成器直接在 HSM 上生成私有密钥。这种方法比导入您在其他地方生成的私钥更安全,因为私钥保留在 HSM 中。
-
将私钥配置为不可变并禁止导出。
-
使用 HSM 硬件供应商推荐的配置工具,使用受硬件保护的私钥生成证书签名请求 (CSR),然后使用Amazon IoT控制台或 API 生成客户端证书。
注意
在 HSM 上生成私钥时,轮换密钥的安全最佳实践不适用。
安装具有硬件安全性的 Amazon IoT Greengrass Core 软件
安装 Amazon IoT Greengrass Core 软件时,可以将其配置为使用在 HSM 中生成的私钥。这种方法遵循安全最佳实践,在 HSM 中生成私钥,因此私钥保留在 HSM 中。
要安装具有硬件安全性的Amazon IoT Greengrass核心软件,请执行以下操作:
-
在 HSM 中生成私钥。
-
使用私钥创建证书签名请求 (CSR)。
-
从 CSR 创建证书。您可以创建由其他根证书颁发机构 (CA) 签名Amazon IoT或由其他根证书颁发机构 (CA) 签名的证书。有关如何使用其他根 CA 的更多信息,请参阅《Amazon IoT Core开发人员指南》中的创建自己的客户端证书。
-
下载Amazon IoT证书并将其导入 HSM。
-
从指定使用 PKCS #11 提供程序组件以及 HSM 中的私钥和证书的配置文件中安装 C Amazon IoT Greengrass ore 软件。
您可以选择以下安装选项之一来安装具有硬件安全性的 Amazon IoT Greengrass Core 软件:
-
手动安装
选择此选项可手动创建所需的Amazon资源并配置硬件安全。有关更多信息,请参阅 使用手动资源配置来安装 Amazon IoT Greengrass Core 软件。
-
使用自定义配置进行安装
选择此选项可开发自定义 Java 应用程序,该应用程序可自动创建所需Amazon资源并配置硬件安全。有关更多信息,请参阅 安装具有自定义资源配置功能的 C Amazon IoT Greengrass ore 软件。
当前,在使用自动资源配置或Amazon IoT队列配置进行安装时,Amazon IoT Greengrass不支持安装具有硬件安全性的Amazon IoT Greengrass核心软件。
在现有核心设备上配置硬件安全
您可以将核心设备的私钥和证书导入 HSM 以配置硬件安全。
注意事项
-
您必须对核心设备的文件系统具有 root 用户访问权限。
-
在此过程中,您将关闭 Amazon IoT Greengrass Core 软件,因此在配置硬件安全时,核心设备处于离线状态且不可用。
要在现有核心设备上配置硬件安全,请执行以下操作:
-
初始化 HSM。
-
将 PKCS #11 提供程序组件部署到核心设备。
-
停止Amazon IoT Greengrass核心软件。
-
将核心设备的私钥和证书导入 HSM。
-
更新Amazon IoT Greengrass核心软件的配置文件以使用 HSM 中的私钥和证书。
-
启动Amazon IoT Greengrass核心软件。
步骤 1:初始化硬件安全模块
完成以下步骤,在核心设备上初始化 HSM。
初始化硬件安全模块
-
在 HSM 中初始化 PKCS #11 令牌,然后保存该令牌的插槽 ID 和用户 PIN。查看 HSM 的文档,了解如何初始化令牌。稍后在部署和配置 PKCS #11 提供程序组件时,您将使用插槽 ID 和用户 PIN。
步骤 2:部署 PKCS #11 提供程序组件
完成以下步骤以部署和配置 PKCS #11 提供程序组件。您可以将该组件部署到一个或多个核心设备上。
-
在Amazon IoT Greengrass控制台
导航菜单中,选择组件。 -
在 “组件” 页上,选择 “公共组件” 选项卡,然后选择aws.greengrass.crypto.Pkcs11Provider。
-
在 aws.greengrass.crypto.Pkcs11Provider 页面上,选择部署。
-
从 “添加到部署” 中,选择要修改的现有部署,或选择创建新部署,然后选择 “下一步”。
-
如果您选择创建新部署,请为部署选择目标核心设备或事物组。在 “指定目标” 页面的 “部署目标” 下,选择核心设备或事物组,然后选择下一步。
-
在 “选择组件” 页上的 “公共组件” 下,选择 aws.greengrass.crypto.Pkcs11Provider,然后选择 “下一步”。
-
在 “配置组件” 页面上 aws.greengrass.crypto.Pkcs11Provider,选择,然后执行以下操作:
-
选择配置组件。
-
在 “配置” aws.greengrass.crypto.Pkcs11Provider 模式的 “配置更新” 下,在 “要合并的配置” 中,输入以下配置更新。使用目标核心设备的值更新以下配置参数。指定之前初始化 PKCS #11 令牌的插槽 ID 和用户 PIN。稍后,您将私钥和证书导入 HSM 中的此插槽。
name
-
PKCS #11 配置的名称。
library
-
Amazon IoT Greengrass核心软件可以使用 libdl 加载的 PKCS #11 实现库的绝对文件路径。
slot
-
包含私钥和设备证书的插槽的 ID。此值不同于插槽索引或插槽标签。
userPin
-
用于访问插槽的用户 PIN。
{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
-
选择 “确认” 关闭模式,然后选择 “下一步”。
-
-
在配置高级设置页面上,保留默认配置设置,然后选择下一步。
-
在 Review(检查)页上,选择 Deploy(部署)。
部署最多可能需要一分钟才能完成。
要部署 PKCS #11 提供程序组件,请创建包含aws.greengrass.crypto.Pkcs11Provider
在components
对象中的部署文档,并指定该组件的配置更新。按照中的创建部署说明创建新部署或修改现有部署。
以下示例部分部署文档指定部署和配置 PKCS #11 提供程序组件。使用目标核心设备的值更新以下配置参数。保存插槽 ID 和用户 PIN,以便以后在将私钥和证书导入 HSM 时使用。
name
-
PKCS #11 配置的名称。
library
-
Amazon IoT Greengrass核心软件可以使用 libdl 加载的 PKCS #11 实现库的绝对文件路径。
slot
-
包含私钥和设备证书的插槽的 ID。此值不同于插槽索引或插槽标签。
userPin
-
用于访问插槽的用户 PIN。
{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
{
...
, "components": {...
, "aws.greengrass.crypto.Pkcs11Provider": { "componentVersion": "2.0.0", "configurationUpdate": { "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}" } } } }
完成部署可能需要数分钟。您可以使用该Amazon IoT Greengrass服务来检查部署状态。您可以查看Amazon IoT Greengrass核心软件日志,以验证 PKCS #11 提供程序组件是否成功部署。有关更多信息,请参阅下列内容:
如果部署失败,您可以对每台核心设备上的部署进行故障排除。有关更多信息,请参阅 故障排除 Amazon IoT Greengrass V2。
步骤 3:更新核心设备上的配置
C Amazon IoT Greengrass ore 软件使用指定设备运行方式的配置文件。此配置文件包括在哪里可以找到设备用于连接的私钥和证书Amazon Web Services 云。完成以下步骤,将核心设备的私钥和证书导入 HSM,并更新配置文件以使用 HSM。
更新核心设备上的配置以使用硬件安全
-
停止Amazon IoT Greengrass核心软件。如果您使用 systemd 将Amazon IoT Greengrass核心软件配置为系统服务,则可以运行以下命令来停止该软件。
sudo systemctl stop greengrass.service
-
查找核心设备的私钥和证书文件。
-
如果您安装了具有自动配置或队列配置功能的 C Amazon IoT Greengrass ore 软件,则私钥存在于
,证书存在于
/privKey.key/greengrass/v2
。
/thingCert.crt/greengrass/v2
-
如果您安装了手动配置的 Amazon IoT Greengrass Core 软件,则
默认情况下私钥存在,证书
/private.pem.key/greengrass/v2
默认存在。
/device.pem.crt/greengrass/v2
您也可以查看
system.privateKeyPath
和system.certificateFilePath
属性
以查找这些文件的位置。
/config/effectiveConfig.yaml/greengrass/v2
-
-
将私钥和证书导入 HSM。查看 HSM 的文档,了解如何将私钥和证书导入其中。使用之前初始化 PKCS #11 令牌的插槽 ID 和用户 PIN 导入私钥和证书。私钥和证书必须使用相同的对象标签和对象 ID。保存您在导入每个文件时指定的对象标签。稍后在更新 Amazon IoT Greengrass Core 软件配置以使用 HSM 中的私钥和证书时,您将使用此标签。
-
更新Amazon IoT Greengrass核心配置以使用 HSM 中的私钥和证书。要更新配置,您可以修改Amazon IoT Greengrass核心配置文件,然后使用更新的配置文件运行Amazon IoT Greengrass核心软件以应用新的配置。
执行以下操作:
-
创建Amazon IoT Greengrass核心配置文件的备份。如果您在配置硬件安全时遇到问题,则可以使用此备份来恢复核心设备。
sudo cp
/config/effectiveConfig.yaml ~/ggc-config-backup.yaml/greengrass/v2
-
在文本编辑器中打开Amazon IoT Greengrass核心配置文件。例如,你可以运行以下命令来使用 GNU nano 来编辑文件。
替换为 Greengrass 根文件夹的路径。/greengrass/v2
sudo nano
/config/effectiveConfig.yaml/greengrass/v2
-
将的值替换为 HSM 中私钥的 PKCS #11 URI。
system.privateKeyPath
将iotdevicek
ey 替换为之前导入私钥和证书的对象标签。pkcs11:object=
iotdevicekey
;type=private -
将的值替换为 HSM 中证书的 PKCS #11 URI。
system.certificateFilePath
将iotdevicek
ey 替换为之前导入私钥和证书的对象标签。pkcs11:object=
iotdevicekey
;type=cert
完成这些步骤后,Amazon IoT GreengrassCore 配置文件中的
system
属性应与以下示例类似。system: certificateFilePath: "pkcs11:object=
iotdevicekey
;type=cert" privateKeyPath: "pkcs11:object=iotdevicekey
;type=private" rootCaPath: "
/rootCA.pem" rootpath: "/greengrass/v2
" thingName: "/greengrass/v2
MyGreengrassCore
" -
-
在更新的
effectiveConfig.yaml
文件中应用配置。Greengrass.jar
使用--init-config
参数运行以在中应用配置effectiveConfig.yaml
。
替换为 Greengrass 根文件夹的路径。/greengrass/v2
sudo java -Droot="
" \ -jar/greengrass/v2
/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config/greengrass/v2
/config/effectiveConfig.yaml/greengrass/v2
-
启动Amazon IoT Greengrass核心软件。如果您使用 systemd 将Amazon IoT Greengrass核心软件配置为系统服务,则可以运行以下命令来启动该软件。
sudo systemctl start greengrass.service
有关更多信息,请参阅 运行Amazon IoT Greengrass核心软件。
-
查看 Amazon IoT Greengrass Core 软件日志,验证软件是否启动并连接到Amazon Web Services 云。C Amazon IoT Greengrass ore 软件使用私钥和证书连接到Amazon IoT和Amazon IoT Greengrass服务。
sudo tail -f
/logs/greengrass.log/greengrass/v2
以下信息级别的日志消息表明 Amazon IoT Greengrass Core 软件已成功连接到Amazon IoT和Amazon IoT Greengrass服务。
2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
-
(可选)在验证Amazon IoT Greengrass核心软件是否可以使用 HSM 中的私钥和证书后,从设备的文件系统中删除私钥和证书文件。运行以下命令,并将文件路径替换为私钥和证书文件的路径。
sudo rm
sudo rm
/privKey.key/greengrass/v2
/thingCert.crt/greengrass/v2
使用不支持 PKCS #11 的硬件
PKCS#11 库通常由硬件供应商提供或是开源软件。例如,对于符合标准的硬件(如 TPM1.2),可能会使用现有的开源软件。但是,如果您的硬件没有相应的 PKCS #11 库实现,或者您想编写自定义 PKCS #11 提供程序,请联系您的 Amazon Web Services Enterprise Support 代表提出与集成相关的问题。