12.2. 加密 KRA 操作
证书系统在密钥恢复授权(KRA)中加密以下关键操作:
归档:
- 以证书请求消息格式(CRMF)软件包归档的密钥进行加密,以传输到 KRA。
- 加密 KRA LDAP 数据库中存储的密钥。
recovery:
- 加密用户提供的会话密钥,以传输到密钥。
- 使用用户提供的会话密钥或创建 PKCS the 软件包解密 secret 和重新加密。
生成:
- 为存储生成的密钥加密。
12.2.1. 客户端如何管理密钥操作加密 复制链接链接已复制到粘贴板!
证书系统客户端自动使用 KRA 配置中设置的加密算法,且不需要进一步的操作。
12.2.2. 在 KRA 中配置加密算法 复制链接链接已复制到粘贴板!
只有 AES CBC (如果 kra.allowEncDecrypt.archival=true
和 kra.allowEncDecrypt.recovery=true
)和 AES Key Wrap (在 kra.allowEncDecrypt.archival=false
和 kra.allowEncDecrypt.recovery=false
)允许时,在以下配置中允许。任何支持任一算法的 FIPS 140-2 验证 HSM,对 KRA 提供的密钥存档和恢复功能都被允许。
证书系统在 /var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中定义与密钥操作加密相关的配置参数组。我们推荐以下一组参数(请参阅上述关于其他选项的备注):
每个组(kra.storageUnit.wrapping.0.
* vs kra.storageUnit.wrapping.1.
*)都有单独的设置,数字定义哪些设置属于同一配置组。当前配置组在 /var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中的 kra.storageUnit.wrapping.choice
参数中设置。
在继续操作前,确保配置文件中设置了 kra.storageUnit.wrapping.choice=1
。
证书系统将解密数据所需的信息添加到 KRA 数据库中的记录中。因此,即使更改了加密算法,证书系统仍然能够使用不同的加密算法解密之前存储在 KRA 中的数据。
12.2.2.1. 参数及其值解释 复制链接链接已复制到粘贴板!
每个 secret ("payload")都使用会话密钥加密。控制此加密的参数使用 有效负载
前缀。要使用的参数集合取决于 kra.allowEncDecrypt.archival
和 kra.allowEncDecrypt.recovery
的值。默认情况下,这两者都是 false。如需了解这两个参数对 HSM 的影响,请参阅 第 12.2.2.2 节 “在 KRA 中使用 AES 加密时解决 HSM 的限制”。
当 kra.allowEncDecrypt.archival
和 kra.allowEncDecrypt.recovery
都为 false 时:
-
payloadWrapAlgorithm
决定使用的嵌套算法。唯一的有效选择是AES KeyWrap
。 -
当
payloadWrapAlgorithm=AES/CBC/PKCS5Padding
时,必须指定payloadWrapIVLength=16
来指示需要生成 IV (因为 CBC 需要 1)。
当 kra.allowEncDecrypt.archival
和 kra.allowEncDecrypt.recovery
都为 true 时:
-
payloadEncryptionAlgorithm
决定使用的加密算法。唯一有效的选择是 AES。 -
payloadEncryptionMode
决定块链模式。唯一有效的选择是 CBC。 -
payloadEncryptionPadding
决定 padding 方案。唯一有效的选择是 PKCS5Padding。
然后,会话密钥附带 KRA 存储节点,这是一个 RSA 令牌。控制会话密钥及其加密的参数前缀为 sessionKey
。
-
sessionKeyType
是要生成的密钥类型。唯一有效的选择是 AES。 -
sessionKeyLength
是生成的会话密钥的长度。有效选择是 128 和 256,用于分别使用 128 位 AES 或 256 位 AES 加密有效负载。 -
sessionKeyWrapAlgorithm
是 KRA 存储证书的关键类型。本指南中唯一有效的选择是 RSA。
12.2.2.2. 在 KRA 中使用 AES 加密时解决 HSM 的限制 复制链接链接已复制到粘贴板!
如果您在 KRA 中运行启用了 AES 的证书系统,但硬件安全模块(HSM)不支持 AES 密钥嵌套功能,则密钥归档会失败。要解决这个问题,支持以下解决方案:
为密钥嵌套选择不同的算法
有时 KRA 不支持默认密钥嵌套算法,但它支持其他算法。例如,使用 AES-128-CBC
作为密钥换行算法:
在
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中设置以下参数:kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap/Padding kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.1.sessionKeyLength=128
kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap/Padding kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.1.sessionKeyLength=128
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启实例:
systemctl restart pki-tomcatd@instance_name.service
# systemctl restart pki-tomcatd@instance_name.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,如果使用 Nuxwdog watchdog:
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 KRA 在不同的实例中运行,则需要重启这两个实例。
为键嵌套选择不同的算法具有好处:如果 HSM 之后添加了对 AES 密钥嵌套的支持,您可以恢复设置,因为密钥记录设置了相关信息。
此配置使用 kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
和 kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
参数。
将 KRA 设置为加密模式
如果 HSM 不支持任何 KeyWrap 算法,在一些方面,需要将 KRA 放入 加密模式。当将 KRA 设置为加密模式时,所有密钥都将使用加密算法而不是密钥嵌套算法存储。
将 KRA 设置为加密模式:
将
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中的以下参数设置为true
:kra.allowEncDecrypt.archival=true kra.allowEncDecrypt.recovery=true
kra.allowEncDecrypt.archival=true kra.allowEncDecrypt.recovery=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启服务:
systemctl restart pki-tomcatd@instance_name.service
# systemctl restart pki-tomcatd@instance_name.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,如果使用 Nuxwdog watchdog:
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 KRA 在与 CA 不同的实例中运行,则需要重启这两个实例。
此配置使用 kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
和 kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
参数。
如果您稍后根据 “为密钥嵌套选择不同的算法”一节 切换到不同的算法,则必须手动将适当的 meta 数据添加到创建的记录中,然后才能将 KRA 设置为加密模式。