// 此模板仅供参考,如果不适用可以修改
问题描述
我们自己环境升级了这个包后,无法升级自己签名的包,报错add pss root certificate failed,机器人回复是企业环境升级社区的无签名包后导致的,但是没看到解决方法。
环境信息
-
操作系统:[如 Ubuntu 24.04]
-
软件版本:[如 OpenUBMC2509]
-
硬件配置:[如 CPU、内存等]
重现步骤
1、升级社区的26.03.00.01版本BMC
2、升级我基于社区镜像出的BMC
3、两个BMC之间可以倒换,但是我们自己签名的BMC无法升级,过度包也无法升级,报错add pss root certificate failed
期望结果
可以升级有签名的包
实际结果
无法升级
尝试过的解决方案
分析结论
报错add pss root certificate failed,机器人回复是企业环境升级社区的无签名包后导致的,没看到解决方法
答案内容由AI生成,仅供参考:
解决方案
建议按以下步骤操作,将环境从社区无签名状态平稳过渡到支持自定义签名的状态:
制作正确的过渡包
过渡包的作用是让环境“认识”您的根证书,从而能够验证后续带签名的包。制作方法参考 自签名CA创建以及HPM签名指导(Topic 1665)和 使用 bingo 进行自签名 BMC 固件包指导。
关键配置点:
- 生成
rootca.der、rootca.crl、signer.pem、ts_signer.pem、tsa.cnf 等证书文件。
- 将这些文件放入
partner/ 目录下(或依据构建脚本放置到对应位置)。
- 使用
bingo 编译(而非 bmcgo),编译时:
- 在
manifest.yml 中设置 community_enable: false(过渡包通常需要开启签名验证,以便后续接受签名包)。
- 如果使用
.bmcgo/config,确保 没有 [hpm_encrypt] enable=true 配置,即过渡包不加密(但需要包含签名)。
- 具体可参考 Topic 1665/7 的链接:https://discuss.openubmc.cn/t/topic/1665/7
升级过渡包
将生成的过渡包(如 rootfs_openUBMC.hpm)通过 Web 或 CLI 升级到当前社区环境。
升级成功后,环境将加载并信任您自定义的根证书,后续可以验证带签名的包。
制作并升级正式签名包
过渡包升级完成后,即可升级正式的自签名包。正式包制作时:
- 可以使用
bmcgo 或 bingo,但必须开启签名和加密([hpm_encrypt] enable=true),且签名文件与过渡包使用的证书一致。
- 如果希望跳过加密(仅做签名),则需在
.bmcgo/config 中不配置 [hpm_encrypt] 或设置 enable=false,同时必须确认环境是否支持。
- 对于正式签名包,通常
community_enable 设为 false。
重要注意事项
- 过渡包本身不能是社区包:它必须带签名,以便将根证书写入环境。如果过渡包也设置
community_enable:true,则它不会主动安装根证书,升级后环境仍处于无签名状态。
manifest.yml 必须正确修改:参考 Topic 2575 中 LiJiang 的回复:“这个过渡包只能升级带签名的包。制作签名升级包时需要修改 manifest.yml。”
- 检查证书格式:确保根证书为 PSS 填充算法(若环境要求),可通过
openssl x509 -text -noout | grep "Signature Algorithm" 验证。
点击此处查看详细分析解答
问题分析
根据您描述的现象——升级社区无签名包后,再升级自己签名的固件包报错 add pss root certificate failed,这符合 openUBMC 固件升级机制中的典型场景。
错误原因
-
社区包(community 版本)默认是不签名、不加密的,运行社区包的环境上不会加载自定义根证书。
-
当环境运行社区包时,直接升级一个带签名(且未标记为社区包)的固件包,firmware_mgmt 组件会尝试加载签名验证所需的根证书,但环境中没有对应的合法根证书,因而失败。
-
根据 openUBMC 官方故障排查文档(参见 Search Result 第 10 条 firmware_mgmt.md):
常见原因:社区的 hpm 包为不签名不加密方案,当环境上为社区包时,直接升级原始包会上报添加根证书失败。
解决方案:如果环境上是社区包,在升级回原始包前需要先升过渡包。
过渡包也无法升级的可能原因
您提到过渡包也报相同错误,这通常表明过渡包制作不正确,或者其签名配置与当前环境不匹配。在相似案例(Topic 2575)中,用户制作过渡包成功,但后续签名包升级失败,排查发现过渡包本身要求后续升级的包必须满足特定签名条件,且 manifest.yml 的配置未按要求调整。
解决方案
建议按以下步骤操作,将环境从社区无签名状态平稳过渡到支持自定义签名的状态:
制作正确的过渡包
过渡包的作用是让环境“认识”您的根证书,从而能够验证后续带签名的包。制作方法参考 自签名CA创建以及HPM签名指导(Topic 1665)和 使用 bingo 进行自签名 BMC 固件包指导。
关键配置点:
- 生成
rootca.der、rootca.crl、signer.pem、ts_signer.pem、tsa.cnf 等证书文件。
- 将这些文件放入
partner/ 目录下(或依据构建脚本放置到对应位置)。
- 使用
bingo 编译(而非 bmcgo),编译时:
- 在
manifest.yml 中设置 community_enable: false(过渡包通常需要开启签名验证,以便后续接受签名包)。
- 如果使用
.bmcgo/config,确保 没有 [hpm_encrypt] enable=true 配置,即过渡包不加密(但需要包含签名)。
- 具体可参考 Topic 1665/7 的链接:https://discuss.openubmc.cn/t/topic/1665/7
升级过渡包
将生成的过渡包(如 rootfs_openUBMC.hpm)通过 Web 或 CLI 升级到当前社区环境。
升级成功后,环境将加载并信任您自定义的根证书,后续可以验证带签名的包。
制作并升级正式签名包
过渡包升级完成后,即可升级正式的自签名包。正式包制作时:
- 可以使用
bmcgo 或 bingo,但必须开启签名和加密([hpm_encrypt] enable=true),且签名文件与过渡包使用的证书一致。
- 如果希望跳过加密(仅做签名),则需在
.bmcgo/config 中不配置 [hpm_encrypt] 或设置 enable=false,同时必须确认环境是否支持。
- 对于正式签名包,通常
community_enable 设为 false。
重要注意事项
- 过渡包本身不能是社区包:它必须带签名,以便将根证书写入环境。如果过渡包也设置
community_enable:true,则它不会主动安装根证书,升级后环境仍处于无签名状态。
manifest.yml 必须正确修改:参考 Topic 2575 中 LiJiang 的回复:“这个过渡包只能升级带签名的包。制作签名升级包时需要修改 manifest.yml。”
- 检查证书格式:确保根证书为 PSS 填充算法(若环境要求),可通过
openssl x509 -text -noout | grep "Signature Algorithm" 验证。
参考来源(基于您提供的上下文)
| 来源 |
关键信息 |
Search Result 10 (firmware_mgmt.md) |
明确指出社区包环境直接升级带签名的包会报 add pss root certificate failed,应先升过渡包。 |
| Topic 1698(caiyesheng_b48v3 回复) |
社区包会跳过验签和加解密;非社区包必须加密;可设置 community_enable:true 标记为社区包。 |
| Topic 2575(LiJiang 回复) |
过渡包只能升级带签名的包,制作签名包时需修改 manifest.yml。 |
| Topic 5153(arch 回复) |
从社区包环境升级到签名环境,应先用 bingo 构建不加密但带签名的包升级,然后再升级正式加密签名的包。 |
| Topic 1665/7 链接 |
官方指导:启用固件签名和加密的详细步骤。 |
如果按照上述流程仍无法解决,请提供:
- 过渡包构建时的
manifest.yml 片段。
- 升级失败时的完整
app.log 日志(特别是 validate_sign.lua 相关行)。
- 根证书的算法信息(可通过
openssl x509 -in rootca.pem -text -noout 查看)。
这样可以帮助进一步定位证书加载失败的具体原因。
yaoshun1
(yaoshun)
3
建议在bmc_core SIG发帖求助,你们自己签名的固件是bingo出的吗?
不是,按照机器人回复的重新用bingo build出包后升级问题解决