rootca.crl过期了怎么办?

问题描述

如题,一年前做的rootca.crl证书,现已失效

编译hpm包时会报错

该如何进行证书的更新?

重新按照自签名CA创建以及HPM签名指导制作了新的证书,替换后编译可通过

但是更新时会显示无效的升级包

app.log报错如下:

1970-01-01 02:42:09.877524 web_backend NOTICE: init.lua(98): upload content length:number 68969326, remaining capacity space:number 134094848
1970-01-01 02:42:16.259647 firmware_mgmt NOTICE: active_fructl.lua(95): get host type is Singlehost
1970-01-01 02:42:16.260178 firmware_mgmt NOTICE: utils.lua(35): The file path is local.
1970-01-01 02:42:16.269387 firmware_mgmt NOTICE: init.lua(33): update status to FS_SIMPLE_UPGRADING.
1970-01-01 02:42:16.283164 firmware_mgmt NOTICE: task_service.lua(49): task create success, task id: 3113431330
1970-01-01 02:42:16.337004 firmware_mgmt NOTICE: file_transfer.lua(145): start to move file [rootfs_openUBMC.hpm] from tmp to shm
1970-01-01 02:42:16.801839 firmware_mgmt NOTICE: file_transfer.lua(150): move_file_s ok:true, err:0
1970-01-01 02:42:17.249509 firmware_mgmt WARNING: init.lua(97): nil:294 > validate_sign.lua:-1 > validate_sign.lua:172: An error occurred during the firmware upgrade process. Details: verify signature error, code 88200004
1970-01-01 02:42:17.249874 firmware_mgmt ERROR: validate_sign.lua(296): FirmwareUpgradeError: An error occurred during the firmware upgrade process. Details: verify signature error, code 88200004
1970-01-01 02:42:17.250614 firmware_mgmt ERROR: control.lua(321): parse package(rootfs_openUBMC.hpm) failed, ret:nil.
1970-01-01 02:42:17.458282 firmware_mgmt NOTICE: active_fructl.lua(95): get host type is Singlehost
1970-01-01 02:42:17.458629 firmware_mgmt NOTICE: active_single_host_fructrl.lua(61): active_single_host_fructrl fructrl get power status
1970-01-01 02:42:17.463160 firmware_mgmt NOTICE: state_simple_upgrading.lua(87): simple upgraded, current active mode is:nil, wait restart seconds:30000
1970-01-01 02:42:17.470158 firmware_mgmt NOTICE: init.lua(33): update status to FS_IDLE.

若仅替换rootca.crl保留其他证书文件
则仍会编译报错

hpm_verify -r rootca.pem -C cms.crl.pem -c /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img -s /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms
ERROR: 执行命令 /usr/local/bin/hpm_verify -r rootca.pem -C cms.crl.pem -c /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img -s /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms 错误, 日志: /home/workspace/manifest/temp/log/task.log
Process SignProcess-9:9:2:
Traceback (most recent call last):
File “/usr/lib/python3.12/multiprocessing/process.py”, line 314, in _bootstrap
self.run()
File “/usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task_hpm_envir_prepare.py”, line 31, in run
self.work.signature(f"{self.config.work_out}/rootfs_iBMC.img",
File “/usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task.py”, line 280, in signature
self.run_command(f"hpm_verify -r rootca.pem -C cms.crl.pem -c {unsigned_file} -s {cms_output}“)
File “/usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task.py”, line 257, in run_command
return self.tools.run_command(command, ignore_error, sudo, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.12/dist-packages/bmcgo/utils/tools.py”, line 665, in run_command
raise e
File “/usr/local/lib/python3.12/dist-packages/bmcgo/utils/tools.py”, line 655, in run_command
ret = subprocess.run(command, stdout=log_fd, stderr=log_fd, check=check, timeout=timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3.12/subprocess.py”, line 571, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command ‘[’/usr/local/bin/hpm_verify’, ‘-r’, ‘rootca.pem’, ‘-C’, ‘cms.crl.pem’, ‘-c’, ‘/home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img’, ‘-s’, ‘/home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms’]’ returned non-zero exit status 1.
Traceback (most recent call last):
File “/usr/local/lib/python3.12/dist-packages/bmcgo/frame.py”, line 274, in run
ret = self._run()
^^^^^^^^^^^
File “/usr/local/lib/python3.12/dist-packages/bmcgo/frame.py”, line 316, in _run
ret = work_x.run()
^^^^^^^^^^^^
File “/usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task_hpm_envir_prepare.py”, line 116, in run
raise errors.BmcGoException(f"签名进程发生错误, 返回值: {sign.exitcode}”)
bmcgo.errors.BmcGoException: 签名进程发生错误, 返回值: 1
ERROR: 签名进程发生错误, 返回值: 1
清理残留的进程
ERROR: 任务 personal 执行失败
ERROR: 请查看日志信息

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

总结

根本原因rootca.crl 有效期已过(原 Next Update 为 2026-05-29,当前时间已超出)。
解决方案

  1. 使用您的私有 CA 私钥重新生成 CRL(设置适当有效期,建议 ≤7 天)。
  2. 将 DER 格式的新 CRL 放置到 manifest.yml 指定的路径。
  3. 重新执行构建命令。
  4. 验证构建日志无签名错误。

此过程完全基于知识库提供的 CRL 更新操作指南自签名CA创建指导,无需引入外部知识。如有其他疑问,请结合构建日志 app.log 进一步定位。

点击此处查看详细分析解答

根据您提供的上下文信息,rootca.crl 过期会导致 HPM 包编译时签名验证失败,因为构建流程中的 hpm_verify 会使用该 CRL 检查签名证书的吊销状态。解决此问题的核心是 替换为最新有效版本的 rootca.crl,并确保构建环境中的文件路径配置正确。

以下是基于知识库中 具体操作指南 梳理的修复步骤:


1. 确认 CRL 过期状态

使用 OpenSSL 检查当前 CRL 文件的有效期:

openssl crl -in rootca.crl -inform DER -text -noout

重点关注 Next Update 字段,若已晚于当前时间,则该 CRL 已失效。


2. 生成或获取最新的 CRL 文件

情况一:使用自建私有 CA(您的情况)

如果您是自行搭建的私有 CA,需要重新生成 CRL。典型命令如下(需具备根 CA 私钥 rootca.key 和 CA 配置文件 openssl.cnf):

# 生成新的 CRL(有效期可指定,例如 7 天)
openssl ca -gencrl -config openssl.cnf -out rootca.crl.pem -crldays 7

# 转换为 OpenUBMC 要求的 DER 格式
openssl crl -in rootca.crl.pem -inform PEM -outform DER -out rootca.crl

如果已有专用的 CRL 生成配置(如 crl/crl.cnf),也可参考 自签名CA创建以及HPM签名指导 中的命令:

openssl ca -gencrl -out rootca.crl.pem -config crl/crl.cnf
openssl crl -in rootca.crl.pem -inform pem -outform der -out rootca.crl

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

若您的根证书来自华为信任链(如 Huawei Integrity Root CA - G2),请从华为 PKI 官方页面下载最新 CRL:

下载后同样需要转换为 DER 格式(如果需要)。


3. 替换构建环境中的 CRL 文件

3.1 确认文件路径

根据您的 manifest.ymlcertificates 配置,通常类似:

certificates:
  rootca_crl: ${product}/ca/rootca.crl   # 或指定绝对路径

将新生成的 rootca.crl(DER 格式)复制到该路径下,覆盖旧文件。

3.2 检查文件名匹配

注意文件名必须与配置一致:${product}/ca/rootca.crl(字母大小写、下划线/点号)——常见错误是配置为 rootca_crl 而实际文件名为 rootca_crl(无扩展名),请确保一致(参见社区帖子中 恒扬-李天亮 的解答)。

3.3 重新触发构建

使用正确的签名密码重新运行构建命令:

SIGN_PASSWORD=xxxx bingo build

构建流程中的 hpm_verify 将使用新 CRL 进行本地验签。


4. 验证新 CRL 的有效性

在构建前可手动验证 CRL 文件是否有效:

openssl crl -in rootca.crl -inform DER -text -noout | grep "Next Update"

确保 Next Update 晚于当前时间。


5. 常见后续问题排查

  • 构建仍失败:检查 cms.crl 是否被正确替换。在 HPM 包重新签名流程中,需要显式将 rootca.crl 替换为 cms.crl(例如在 cms_sign_hpm.sh 脚本中)。构建阶段的 hpm_verify 会自动使用配置的 CRL,但若您手动重新签名 HPM 包,请参考文档片段中的步骤:
    cp /your/path/to/latest_rootca.crl cms.crl   # 替换旧CRL
    
  • 日志报错 add pss root certificate failed:通常是 CRL 格式或签名算法不匹配,请确认新 CRL 的 Signature Algorithm 与根证书一致(例如 rsassaPss)。
  • 证书已被吊销:确认 signer.pem 未被吊销,如果需要重新签发 signer.pem,则需同时更新签名证书并重新生成 CRL。

总结

根本原因rootca.crl 有效期已过(原 Next Update 为 2026-05-29,当前时间已超出)。
解决方案

  1. 使用您的私有 CA 私钥重新生成 CRL(设置适当有效期,建议 ≤7 天)。
  2. 将 DER 格式的新 CRL 放置到 manifest.yml 指定的路径。
  3. 重新执行构建命令。
  4. 验证构建日志无签名错误。

此过程完全基于知识库提供的 CRL 更新操作指南自签名CA创建指导,无需引入外部知识。如有其他疑问,请结合构建日志 app.log 进一步定位。

不要重新制作证书。

参考AI 的回答, 使用原来的CA证书重新生成crl即可。

请问rootca.pfx文件丢失还能这么操作吗?由于pfx丢失所以无法还原rootca_pri.pem文件了

试下这个是否可行:

  1. 下载bingo源码,
  2. 在bingo 里把hpm_verify的行注释掉,
  3. 执行sh install_local.sh 本地重新安装bingo
  4. 在manifest使用原来的证书和crl构建出包,看下是否能升级成功。
  5. 如果能,则
    a. 在manifest目录将新的根证书放在rootfs/opt/bmc/trust/partner下 制作过渡包。
    b. 使用新的根证书进行签名构建出包。即完成转换。
  6. 如果不能,则需要去烧片。

好的,感谢您的指导!