关于签名根证书最新的CRL吊销列表文件问题

根据上面的指导对hpm进行再签名

对name.filelist,使用hpm_signer -s signer.pem -t ts_signer.pem -T tsa.cnf -i name.filelist -o name.filelist.cms生成name.filelist.cms,此处成功

但是有一个“同时需要签名根证书最新的CRL吊销列表文件。”这个步骤,指导中并没有提供更新的步骤,导致CRL吊销列表没有更新,我生成的bios.hpm无法成功更新

提问:如何使用我的签名根证书更新CRL吊销列表文件?

答案内容由AI生成,仅供参考:

如何使用签名根证书更新 CRL 吊销列表文件?

根据您提供的 《hpm包格式说明以及重新签名指导》 内容,CRL吊销列表 是 HPM 签名包的重要组成部分,用于验证签名证书在签发时是否已被吊销。您遇到的问题——“生成的 bios.hpm 无法成功更新”——很可能是由于 CRL(证书吊销列表)文件过期或无效导致的签名校验失败。


:pushpin: 核心问题解析

文档中提到:

“使用hpm_signer工具生成新的签名cms文件,同时需要签名根证书最新的CRL吊销列表文件。”

这说明 CRL吊销列表(即 cms.crl 文件)必须是最新的有效版本,否则升级过程会在验证 CMS 签名时失败。

该文档本身并未提供生成或更新 CRL 的方法,这是因为 CRL 文件通常由证书颁发机构(CA)周期性生成,不在最终 HPM 打包流程中动态创建。


:white_check_mark: 正确做法:如何获取并使用最新的 CRL 文件

要解决您的问题,必须确保使用的 rootca.crl 文件是最新的、有效的。

以下是基于 OpenUBMC 和 BMCGo 生态 的标准化操作流程。


:white_check_mark: 第一步:理解 CRL 文件来源

文件名 说明
rootca.crl 是根CA颁发的 证书吊销列表(Certificate Revocation List),由您的私有CA(或华为/合作伙伴CA)定期签发。
cms.crl 在 HPM 包中固定命名为 cms.crl,其内容就是 rootca.crl

:warning: hpm_signercms_sign_hpm.sh 不会自动生成 CRL 文件,必须手动维护最新版


:white_check_mark: 第二步:获取签名根证书对应的最新 CRL 文件

情况一:使用您自己搭建的私有 CA

如果您使用 OpenSSL 或其他私有 CA 工具链来管理 rootca.dersigner.pem,则应使用以下命令生成新的 CRL 文件

# 使用私有CA密钥和配置文件生成CRL
openssl ca -gencrl -config openssl.cnf -out rootca.crl -keyfile rootca.key -passin pass:your_password

或如果已有 CRL 配置目录:

# 更新 CRL 列表
openssl ca -gencrl -out rootca.crl -crldays 7

:locked_with_key: 此操作需要您作为 CA 运营者具备:

  • 根CA私钥 (rootca.key)
  • CA 配置文件 (openssl.cnf)
  • 权限执行 OpenSSL 命令

生成后,将二进制 DER 格式的 CRL 写入(如需要):

# 转换为 DER 格式(OpenUBMC 要求)
openssl crl -in rootca.crl -outform DER -out rootca.crl

情况二:使用华为官方或合作伙伴 CA

如果您的签名根证书是 从华为提供的信任链衍生而来(如 Huawei Integrity Root CA - G2),请从以下方式下载官方 CRL:

:wrench: 推荐链接:
:backhand_index_pointing_right: https://support.huawei.com/pki/pkidetail!loadCatagoryPkiData.action?type=PKI_TYPE-ROOT

在此页面可以找到与“Huawei Integrity Root CA - G2”对应的 CRL 下载选项

若您使用的是合作方自建 CA,请联系对应团队确认 CRL 生成机制。


:white_check_mark: 第三步:更新打包流程中的 cms.crl 文件

完成 CRL 文件更新后,在重新签名 HPM 包时,请确保以下步骤使用最新的 rootca.crl

# 剥离原始 HPM 包内容
dd if=bios.hpm of=name.filelist bs=1 skip=56 count=129
dd if=bios.hpm of=name.filelist.cms bs=1 skip=185 count=3505
dd if=bios.hpm of=cms.crl bs=1 skip=3690 count=683        # ← 原始旧CRL(需替换)
dd if=bios.hpm of=bios.bin bs=1 skip=4373

# 替换为最新的 CRL 文件! ← 关键步骤
cp /your/path/to/latest_rootca.crl cms.crl

# 使用 hpm_signer 重新生成 CMS 签名
hpm_signer -s signer.pem -t ts_signer.pem -T tsa.cnf -i name.filelist -o name.filelist.cms

# 使用 cms_sign_hpm.sh 重新打包
cms_sign_hpm.sh 2 bios.hpm

# 重命名以符合升级要求
mv name.hpm.signed bios.hpm

:white_check_mark: 特别注意:

  • cms.crl 不是由 hpm_signer 生成的
  • 它必须是与当前签名根证书 配对且未过期 的 CRL。
  • CRL 过期会导致 add pss root certificate failed 等错误(常见于日志 app.log 中)。

:white_check_mark: 第四步:验证 CRL 文件有效性

可以用 OpenSSL 检查 CRL 是否有效:

# 查看 CRL 内容(文本格式)
openssl crl -in cms.crl -inform DER -text -noout

# 输出示例关注字段:
# Last Update: ...
# Next Update: ...   ← 必须晚于当前时间!
# Signature Algorithm: ...

Next Update 已过期,则此 CRL 不可用于签名验证


:white_check_mark: 第五步:检查 BMC 系统日志定位问题

若升级失败,请查看运行日志定位根本原因:

tail -f /var/log/app.log | grep firmware_mgmt

常见报错及含义:

日志信息 原因分析
add pss root certificate failed CRL 文件无效、格式错误或签名算法不匹配(PSS vs PKCS#1v1.5)
Certificate has been revoked 当前使用的 signer 证书已被列入 CRL
Invalid signature hpm_signer 参数错误或密钥不匹配
CMS_verify failed CRL 缺失、过期或 CA 根未被信任

:white_check_mark: 最佳实践建议(总结)

步骤 操作
1 维护一套完整的私有 CA 环境,能定期生成新 CRL
2 每次重签名前,确认 cms.crl 是否仍在有效期内(建议 ≤7 天)
3 若使用 Huawei CA,访问 华为PKI支持页 获取最新 CRL
4 使用 openssl crl -text 验证 CRL 文件
5 将正确文件名 cms.crl 放入 cms_sign_hpm.sh 执行目录
6 使用 app.logParseFirmwarePackage 排查签名校验失败原因

:link: 参考文档链接

  1. 华为 PKI 根证书下载:
    https://support.huawei.com/pki/pkidetail!loadCatagoryPkiData.action?type=PKI_TYPE-ROOT

  2. hpm_signer 工具手册(来自知识库):
    该工具依赖 hpm_signer工具 + tsa.cnf + signer.pem + 有效的 rootca.crl

  3. OpenUBMC 固件验证逻辑:
    调用 ParseFirmwarePackage 方法解析 HPM 包,并进行 CMS 验签和 CRL 吊销校验。


:white_check_mark: 结论

您无法成功升级的根本原因是:

:warning: 使用了过期或无效的 CRL吊销列表 文件(cms.crl

:white_check_mark: 解决方案是:

替换 cms.crl 为与签名根证书配对、且未过期的最新 CRL 文件。

该文件不能由 hpm_signer 自动生成,必须由 CA 持有者(您或您的团队)使用 OpenSSL 等工具主动签发并维护

只要确保 cms.crl 为最新有效版本,配合正确的 signer.pem 和时间戳配置,即可顺利完成 HPM 包的重新签名并成功升级。

相关链接:

  1. hpm包格式说明以及重新签名指导
  2. 社区工程能力每日答疑纪要
  3. 编译白牌包被跳过,不出白牌包
  4. hpm签名包升级失败
  5. openUBMC

参考AI提供的帮助,或者参考 自签名CA创建以及HPM签名指导