社区bingo无签名版本升级高可用版本签名疑问

在前期调试中使用的是社区无签名版本的openubmc,现在由于可以使用高可用版本。故需要将无签名的社区版本升级为在高可用版本。在升级时验签失败,查看了相关帖子说是根证书有问题。后续又在无签名的社区版本中manifest/build/product/BMC/openUBMC/rootfs/opt/bmc/trust/partner路径下放置了rootca.der与rootca.crl证书。再次升级依然报错88200004,不过多路一条validate_sign.lua(170): the custom ca certificate is exist, load custom certificate日志。向请问一下社区版本需要如何配置才能升级到高可用版本

环境配置
社区版本:25.12 LTS
高可用版本中manifest.yml中添加了 certificates配置,在.bmcgo/config中新增了

[hpm_encrypt]
enable=true

升级失败日志

2026-03-18 12:36:57.124239 firmware_mgmt NOTICE: file_transfer.lua(169): start to move file [temp_upgrade_file.hpm] from tmp to shm
2026-03-18 12:36:58.947457 firmware_mgmt NOTICE: file_transfer.lua(174): move_file_s ok:true, err:0
2026-03-18 12:36:59.371902 firmware_mgmt WARNING: init.lua(97): nil:315 > validate_sign.lua:-1 > validate_sign.lua:193: An error occurred during the firmware upgrade process. Details: verify signature error, code 88200004
2026-03-18 12:36:59.372682 firmware_mgmt ERROR: validate_sign.lua(317): FirmwareUpgradeError: An error occurred during the firmware upgrade process. Details: verify signature error, code 88200004
2026-03-18 12:36:59.373719 firmware_mgmt ERROR: task_instance.lua(185): parse package(rootfs_openUBMC.hpm) failed, ret:InvalidFirmwarePackage.

你可以咨询你们搞签名的cicd人员,你这个还是没有签名,bingo 签名版本 是有教程的。

你放进去,你社区版本依然是没签名,如何升级带有签名加密的包。直接升级bingo 版本签名加密没有生效的签名包即可。把你们用bmcgo 编译的,改成用bingo 构建,同时正常构建签名包,不要你现在用的这种方法。然后再升级bmcgo 没开启签名校验加密的签名包,然后再升级开启签名加密的签名包。实际上如下链接里面是教你开启签名加密,但是不开启签名加密做的签名包是不会去校验的

https://discuss.openubmc.cn/t/topic/1665/7

先用bingo编译一下签名加密的包进行升级,然后在用bmcgo编译签名加密的包进行升级吗?

bingo 编译签名加密的包,但是需要把你上面的参数删除,以及manifest里面 改成 community_enable: true

参数删除知道是哪些?

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

:pushpin: 总结与建议

问题 原因 解决方案
verify signature error 88200004 签名证书不匹配或填充模式不一致 获取正确的 Root CA 证书,确认签名算法一致
放置证书无效 validate_sign.lua 未启用自定义 CA 验证 联系支持获取支持自定义 CA 的 firmware_mgmt 组件
加密失败 crypto_tool 未配置或密钥不匹配 确保 .bmcgo/confighpm_encrypt=enable,且密钥一致
升级包解析失败 /tmp 空间不足或传包中断 清理 /tmp,避免网络波动
点击此处查看详细分析解答

社区无签名版本升级至高可用签名版本失败问题分析与解决方案

根据您提供的日志信息和操作过程,您在尝试将 openUBMC 社区无签名版本 升级到 高可用签名版本 时遇到了 verify signature error, code 88200004 错误。以下是基于 知识图谱论坛讨论内容 的详细分析与解决方案。


:magnifying_glass_tilted_left: 问题分析

:cross_mark: 核心错误

  • 错误码:88200004
  • 错误信息:verify signature error
  • 日志关键点:
    validate_sign.lua(317): FirmwareUpgradeError: An error occurred during the firmware upgrade process. Details: verify signature error, code 88200004
    parse package(rootfs_openUBMC.hpm) failed, ret:InvalidFirmwarePackage
    

该错误属于典型的 签名验证失败(Signature Verification Failure),系统在升级过程中调用 validate_sign.lua 脚本进行签名校验时失败,导致升级包被判定为 Invalid Upgrade Package


:puzzle_piece: 失败原因分析

结合您提供的操作和上下文信息,失败原因可归纳为以下几点:

1. 证书放置位置不正确或未生效

  • 虽然您已在路径 /opt/bmc/trust/partner/ 放置了 rootca.derrootca.crl,但:
    • rootca.der 必须是与高可用版本签名证书链匹配的 CA 证书
    • 仅放置证书文件不足,firmware_mgmt 组件中的 validate_sign.lua 脚本必须主动加载并使用该证书进行验证
    • 日志中出现 the custom ca certificate is exist 表明证书被识别,但并未成功验证签名。

:warning: 参见知识库:

  • validate_sign.lua 是验证签名的核心脚本,负责加载 CA 证书并执行验签。
  • 社区版本默认不包含对非社区证书的验证逻辑,除非显式配置或重写脚本逻辑,否则无法识别外部签名。

2. 签名算法或填充模式不匹配

  • 您的社区版本使用的是 无签名/未加密模式(no signature validation),而高可用版本使用的是 数字签名(如华为或伙伴自签名)
  • 常见问题:证书签名使用的填充模式不一致。
    • 例如,Huawei Integrity Root CA - G2.derPSS 填充模式,但待升级的高可用固件可能是使用 PKCS#1 v1.5 签名。
    • validate_sign.lua 在校验时若不支持对应模式,将导致 verify signature error

:white_check_mark: 参考知识库:

  • xuhaijun 在 Topic 1083 中指出

    “你获取的固件可能使用 PKCS v1.5 填充模式的证书签名,而 Huawei Integrity Root CA - G2.der 是 PSS 模式,无法验签 PKCS v1.5 的固件。”


3. 缺少 HPM 加密流程配置

  • 您已在 .bmcgo/config 中启用:
    [hpm_encrypt]
    enable=true
    
    这是正确的,因为高可用版本升级包通常需经过 加密和签名 流程。
  • 但必须确保:
    • crypto_tool 已正确配置并可用(用于解密升级包)。
    • 构建脚本(如 packethpm_ext4.sh)执行了加密流程。
    • 若加密密钥与系统当前密钥不匹配,也会导致升级失败(如 key_mgmt 密钥不一致)。

:warning: 参见知识库:

  • 升级密钥解密失败会导致升级失败(见 Q13),尤其在 key_mgmt 更新密钥后未同步。
  • 建议确保固件版本 ≥1.0.30 以增强健壮性。

4. 社区版本未适配签名升级流程

  • openUBMC 社区版本默认使用 community_enable 选项控制签名验证
  • 若未启用签名验证逻辑,即使包已签名,系统仍可能:
    • 跳过签名校验(导致安全风险),或
    • 因不支持签名格式而报错。

:white_check_mark: 参见文档:

  • 社区版本若要支持签名升级,必须在 manifest.yml 中配置证书信任链,并确保 firmware_mgmt 支持加载自定义 CA

:white_check_mark: 解决方案

:white_check_mark: 方案一:确保签名一致性(推荐)

1. 确认高可用版本的签名方式

  • 向高可用版本提供方确认:
    • 使用的是 华为签名 还是 伙伴自签名
    • 签名证书是 PSS 还是 PKCS#1 v1.5 填充?
    • 是否提供 .der 格式的 Root CA 证书

2. 替换使用正确匹配的 Root CA

  • 若高可用版本使用的是 PSS 签名,则必须使用 PSS 格式的 Root CA(如 Huawei Integrity Root CA - G2.der)。
  • 若使用 PKCS#1 v1.5,则需获取对应 Root CA(如 Huawei Integrity Root CA - G1.der)。

3. 使用 hpm_verify 工具本地验证签名

  • 在升级前,使用 hpm_verify 工具校验 HPM 包签名是否有效:
    hpm_verify -i rootfs_openUBMC.hpm -c rootca.der
    
  • 确保返回 “Verified OK”。

:white_check_mark: 方案二:重新签名社区固件(彻底解决)

1. 对高可用固件进行重签名

  • 使用与社区版本一致的信任链(即您自己的 CA)对高可用版本固件进行 重新签名
  • 构建流程:
    • 使用 bmcgo 工具生成签名包。
    • manifest.yml 中配置:
      certificates:
        - path: build/product/BMC/openUBMC/rootfs/opt/bmc/trust/partner/rootca.der
      
    • 确保 validate_sign.lua 加载该证书。

2. 或构建自签名社区版本

  • 构建一个 带签名的社区版本,使用您控制的 CA。
  • 后续所有升级包使用同一 CA 签名,避免兼容性问题。

:white_check_mark: 方案三:修改 validate_sign.lua(仅限场内调试)

如论坛所述(软通华方_程晓菊):

“只放置 rootca.der 证书不行,主要是需要修改 firmware_mgmt 组件下面的 validate_sign.lua 文件,增加验签过程。这个组件是没有开放出来的,目前只能场内制作。”

  • firmware_mgmt 是闭源组件,无法直接修改。
  • 若为特殊项目,可联系项目支持或 PAE 提供 定制化 firmware_mgmt,支持加载自定义 CA 证书链。

:white_check_mark: 方案四:检查 TMP 空间与传包完整性

日志中:

parse package(rootfs_openUBMC.hpm) failed

可能因临时目录 /tmp 空间不足导致文件传输出错或损坏。

建议:

  • 升级前清理 /tmp
    rm -rf /tmp/*
    
  • 检查 /tmp 大小是否充足(建议 ≥200MB)。

:pushpin: 总结与建议

问题 原因 解决方案
verify signature error 88200004 签名证书不匹配或填充模式不一致 获取正确的 Root CA 证书,确认签名算法一致
放置证书无效 validate_sign.lua 未启用自定义 CA 验证 联系支持获取支持自定义 CA 的 firmware_mgmt 组件
加密失败 crypto_tool 未配置或密钥不匹配 确保 .bmcgo/confighpm_encrypt=enable,且密钥一致
升级包解析失败 /tmp 空间不足或传包中断 清理 /tmp,避免网络波动

:books: 参考资料

  • 论坛讨论:
  • 脚本组件:
    • validate_sign.lua:负责签名验证
    • firmware_mgmt:管理升级流程,依赖 ValidateSignLua
  • 错误码:
    • 88200004:签名验证失败
    • Invalid Upgrade Package:签名/格式/证书不匹配

:white_check_mark: 最终建议

最稳妥路径:

  1. 使用与高可用版本一致的 Root CA 证书(确认签名算法)。
  2. 在构建环境中对高可用 HPM 包进行 本地 hpm_verify 验证
  3. 若仍失败,联系 PAE 或项目支持,获取支持该证书链的 firmware_mgmt 组件或定制固件。

若您能提供 高可用版本的签名方式信息HMP 包元信息(如是否含 Huawei Integrity Root CA - G2),可进一步精准定位问题。

[hpm_encrypt]
enable=true
这个全部删除,以及把manifest.yml 里面community_enable: false 改成true

我们正常bingo就是这么编译的,没有签名。bingo之间相互升级时没有问题的。现在是需要升级到bmcgo编译的签名版本。

建议咨询你们的cicd人员,bingo构建是需要带签名的,你终端证书+私钥,时间戳证书+私钥都是需要构建进去的。不是说用bingo manifest就不配置了。 没有签名和不生效签名加密是两回事

先升级一个过渡包,过渡包需配置

image

再升级正常有签名高可用版本即可

目前已经解决了,是我们自己的签名证书有问题导致的。后续重新生成了证书就OK了