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=truekra.allowEncDecrypt.recovery=true)和 AES Key Wrap (在 kra.allowEncDecrypt.archive=falsekra.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.archivekra.allowEncDecrypt.recovery 的值。默认情况下,它们都是 false。请参阅 第 16.2.2.2 节 “在 KRA 中使用 AES 加密时解决 HSM 的限制” 以了解这些两个参数对 HSM 的影响。

kra.allowEncDecrypt.archivekra.allowEncDecrypt.recovery 都为 false 时:

  • payloadWrapAlgorithm 决定使用的嵌套算法。唯一的有效选择是 AES KeyWrap
  • payloadWrapAlgorithm=AES/CBC/PKCS5Padding 时,必须指定 payloadWrapIVLength=16 来指示需要生成 IV (因为 CBC 需要 1)。

kra.allowEncDecrypt.archivekra.allowEncDecrypt.recovery 都为 true 时:

  • payloadEncryptionAlgorithm 决定使用的加密算法。唯一有效的选择是 AES
  • payloadEncryptionMode 决定块链模式。唯一有效的选择是 CBC
  • payloadEncryptionPadding 决定 padding 方案。唯一有效的选择是 PKCS5Padding

然后,会话密钥会随 KRA 存储证书( RSA 令牌)嵌套。控制会话密钥及其加密的参数前缀为 sessionKey

  • sessionKeyType 是要生成的密钥类型。唯一有效的选择是 AES
  • sessionKeyLength 是生成的会话密钥的长度。有效选择为 128256,用于分别使用 128 位 AES 或 256 位 AES 加密有效负载。
  • sessionKeyWrapAlgorithm 是 KRA 存储证书的关键类型。本指南中唯一有效的选择是 RSA

16.2.2.2. 在 KRA 中使用 AES 加密时解决 HSM 的限制

如果您在 KRA 中运行启用了 AES 的证书系统,但硬件安全模块(HSM)不支持 AES 密钥嵌套功能,则密钥归档会失败。要解决这个问题,支持以下解决方案:

为密钥嵌套选择不同的算法

有时,KRA 不支持默认的密钥嵌套算法,但它支持其他算法。例如,使用 AES-128-CBC 作为密钥换行算法:

  1. /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
  2. 重启实例:

    # 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 设置为加密模式:

  1. /var/lib/pki/pki-instance_name/conf/kra/CS.cfg 文件中的以下参数设置为 true

    kra.allowEncDecrypt.archive=true
    kra.allowEncDecrypt.recovery=true
  2. 重启服务:

    # 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 设置为加密模式前创建的记录。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.