16.2. 加密 KRA 操作
证书系统在密钥恢复授权机构(KRA)中加密以下密钥操作:
archival:
- 在证书请求消息格式(CRMF)软件包中归档的密钥加密,以传输到 KRA。
- 加密 KRA LDAP 数据库中存储的密钥。
恢复:
- 用户提供的会话密钥加密,以传输到密钥。
- 使用用户提供的会话密钥或创建 PKCSbusybox 软件包来解密 secret 和重新加密。
generation:
- 为存储加密生成的密钥。
16.2.1. 客户端如何管理密钥操作加密
证书系统客户端自动使用 KRA 配置中设置的加密算法,且不需要进一步的操作。
16.2.2. 在 KRA 中配置加密算法
在以下配置中,只允许 AES CBC (当 kra.allowEncDecrypt.archive=true
和 kra.allowEncDecrypt.recovery=true
)和 AES Key Wrap (在 kra.allowEncDecrypt.archive=false
和 kra.allowEncDecrypt.recovery=false
)中时,允许 AES Key Wrap。任何 FIPS140-2 验证的 HSM,它们都支持 KRA 提供的密钥存档和恢复功能。
证书系统在 /var/lib/pki/pki-instance_name/conf/kra/CS.cfg
文件中定义与密钥操作加密相关的配置参数组。我们推荐以下一组参数(请参阅上面的备注用于其他选项):
kra.allowEncDecrypt.archive=false kra.allowEncDecrypt.recovery=false kra.storageUnit.wrapping.1.sessionKeyLength=256 kra.storageUnit.wrapping.1.sessionKeyWrapAlgorithm=RSA kra.storageUnit.wrapping.1.payloadEncryptionPadding=PKCS5Padding kra.storageUnit.wrapping.1.sessionKeyKeyGenAlgorithm=AES kra.storageUnit.wrapping.1.payloadEncryptionAlgorithm=AES kra.storageUnit.wrapping.1.payloadEncryptionMode=CBC kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap kra.storageUnit.wrapping.1.sessionKeyType=AES kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.choice=1
每个组(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 中的数据。
16.2.2.1. 参数及其值解释
每个 secret (一个"payload")都使用会话密钥加密。控制此加密的参数使用 有效负载
前缀。要使用的参数集合取决于 kra.allowEncDecrypt.archive
和 kra.allowEncDecrypt.recovery
的值。默认情况下,它们都是 false。请参阅 第 16.2.2.2 节 “在 KRA 中使用 AES 加密时解决 HSM 的限制” 以了解这些两个参数对 HSM 的影响。
当 kra.allowEncDecrypt.archive
和 kra.allowEncDecrypt.recovery
都为 false 时:
-
payloadWrapAlgorithm
决定使用的嵌套算法。唯一的有效选择是AES KeyWrap
。 -
当
payloadWrapAlgorithm=AES/CBC/PKCS5Padding
时,必须指定payloadWrapIVLength=16
来指示需要生成 IV (因为 CBC 需要 1)。
当 kra.allowEncDecrypt.archive
和 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。
16.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 kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.1.sessionKeyLength=128
重启实例:
# systemctl restart pki-tomcatd@instance_name.service
OR (如果使用
nuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
如果 KRA 在不同的实例中运行,则 CA 会重启这两个实例。
为密钥嵌套选择不同的算法具有好处:如果 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.archive=true kra.allowEncDecrypt.recovery=true
重启服务:
# systemctl restart pki-tomcatd@instance_name.service
OR (如果使用
nuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
如果 KRA 在与 CA 不同的实例中运行,您需要重启这两个实例。
此配置使用 kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
和 kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
参数。
如果您稍后根据 “为密钥嵌套选择不同的算法”一节 切换到密钥换行的不同算法,您必须手动将 KRA 设置为加密模式前创建的记录。