问题描述
如题,一年前做的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,当前时间已超出)。
解决方案:
manifest.yml 指定的路径。此过程完全基于知识库提供的 CRL 更新操作指南 和 自签名CA创建指导,无需引入外部知识。如有其他疑问,请结合构建日志 app.log 进一步定位。
根据您提供的上下文信息,rootca.crl 过期会导致 HPM 包编译时签名验证失败,因为构建流程中的 hpm_verify 会使用该 CRL 检查签名证书的吊销状态。解决此问题的核心是 替换为最新有效版本的 rootca.crl,并确保构建环境中的文件路径配置正确。
以下是基于知识库中 具体操作指南 梳理的修复步骤:
使用 OpenSSL 检查当前 CRL 文件的有效期:
openssl crl -in rootca.crl -inform DER -text -noout
重点关注 Next Update 字段,若已晚于当前时间,则该 CRL 已失效。
如果您是自行搭建的私有 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
若您的根证书来自华为信任链(如 Huawei Integrity Root CA - G2),请从华为 PKI 官方页面下载最新 CRL:
下载后同样需要转换为 DER 格式(如果需要)。
根据您的 manifest.yml 中 certificates 配置,通常类似:
certificates:
rootca_crl: ${product}/ca/rootca.crl # 或指定绝对路径
将新生成的 rootca.crl(DER 格式)复制到该路径下,覆盖旧文件。
注意文件名必须与配置一致:${product}/ca/rootca.crl(字母大小写、下划线/点号)——常见错误是配置为 rootca_crl 而实际文件名为 rootca_crl(无扩展名),请确保一致(参见社区帖子中 恒扬-李天亮 的解答)。
使用正确的签名密码重新运行构建命令:
SIGN_PASSWORD=xxxx bingo build
构建流程中的 hpm_verify 将使用新 CRL 进行本地验签。
在构建前可手动验证 CRL 文件是否有效:
openssl crl -in rootca.crl -inform DER -text -noout | grep "Next Update"
确保 Next Update 晚于当前时间。
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,当前时间已超出)。
解决方案:
manifest.yml 指定的路径。此过程完全基于知识库提供的 CRL 更新操作指南 和 自签名CA创建指导,无需引入外部知识。如有其他疑问,请结合构建日志 app.log 进一步定位。
不要重新制作证书。
参考AI 的回答, 使用原来的CA证书重新生成crl即可。
请问rootca.pfx文件丢失还能这么操作吗?由于pfx丢失所以无法还原rootca_pri.pem文件了
试下这个是否可行:
hpm_verify的行注释掉,sh install_local.sh 本地重新安装bingorootfs/opt/bmc/trust/partner下 制作过渡包。好的,感谢您的指导!