自己的企业环境升级社区的无签名包后,无法再升级自己签名的固件

// 此模板仅供参考,如果不适用可以修改

问题描述

我们自己环境升级了这个包后,无法升级自己签名的包,报错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生成,仅供参考:

解决方案

建议按以下步骤操作,将环境从社区无签名状态平稳过渡到支持自定义签名的状态:

:one: 制作正确的过渡包

过渡包的作用是让环境“认识”您的根证书,从而能够验证后续带签名的包。制作方法参考 自签名CA创建以及HPM签名指导(Topic 1665)和 使用 bingo 进行自签名 BMC 固件包指导

关键配置点

  • 生成 rootca.derrootca.crlsigner.pemts_signer.pemtsa.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

:two: 升级过渡包

将生成的过渡包(如 rootfs_openUBMC.hpm)通过 Web 或 CLI 升级到当前社区环境。
升级成功后,环境将加载并信任您自定义的根证书,后续可以验证带签名的包。

:three: 制作并升级正式签名包

过渡包升级完成后,即可升级正式的自签名包。正式包制作时:

  • 可以使用 bmcgobingo,但必须开启签名和加密[hpm_encrypt] enable=true),且签名文件与过渡包使用的证书一致。
  • 如果希望跳过加密(仅做签名),则需在 .bmcgo/config 中不配置 [hpm_encrypt] 或设置 enable=false,同时必须确认环境是否支持。
  • 对于正式签名包,通常 community_enable 设为 false

:pushpin: 重要注意事项

  • 过渡包本身不能是社区包:它必须带签名,以便将根证书写入环境。如果过渡包也设置 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 的配置未按要求调整。


解决方案

建议按以下步骤操作,将环境从社区无签名状态平稳过渡到支持自定义签名的状态:

:one: 制作正确的过渡包

过渡包的作用是让环境“认识”您的根证书,从而能够验证后续带签名的包。制作方法参考 自签名CA创建以及HPM签名指导(Topic 1665)和 使用 bingo 进行自签名 BMC 固件包指导

关键配置点

  • 生成 rootca.derrootca.crlsigner.pemts_signer.pemtsa.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

:two: 升级过渡包

将生成的过渡包(如 rootfs_openUBMC.hpm)通过 Web 或 CLI 升级到当前社区环境。
升级成功后,环境将加载并信任您自定义的根证书,后续可以验证带签名的包。

:three: 制作并升级正式签名包

过渡包升级完成后,即可升级正式的自签名包。正式包制作时:

  • 可以使用 bmcgobingo,但必须开启签名和加密[hpm_encrypt] enable=true),且签名文件与过渡包使用的证书一致。
  • 如果希望跳过加密(仅做签名),则需在 .bmcgo/config 中不配置 [hpm_encrypt] 或设置 enable=false,同时必须确认环境是否支持。
  • 对于正式签名包,通常 community_enable 设为 false

:pushpin: 重要注意事项

  • 过渡包本身不能是社区包:它必须带签名,以便将根证书写入环境。如果过渡包也设置 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 链接 官方指导:启用固件签名和加密的详细步骤。

如果按照上述流程仍无法解决,请提供:

  1. 过渡包构建时的 manifest.yml 片段。
  2. 升级失败时的完整 app.log 日志(特别是 validate_sign.lua 相关行)。
  3. 根证书的算法信息(可通过 openssl x509 -in rootca.pem -text -noout 查看)。

这样可以帮助进一步定位证书加载失败的具体原因。

建议在bmc_core SIG发帖求助,你们自己签名的固件是bingo出的吗?

不是,按照机器人回复的重新用bingo build出包后升级问题解决

ok