openUBMC2509升级BIOS固件失败,日志显示无效的升级包

将iBMC升级到openUBMC2509后,在2509中升级BIOS固件,提示 无效的升级包,相关日志如下所示:

1970-01-01 00:28:22.947877 firmware_mgmt NOTICE: file_transfer.lua(141): start to move file [S920S10X10_Update_CS_2P_cms.hpm] from tmp to shm

1970-01-01 00:28:23.033547 firmware_mgmt NOTICE: file_transfer.lua(146): move_file_s ok:true, err:0

1970-01-01 00:28:23.246807 firmware_mgmt WARNING: init.lua(97): nil:-1 > validate_sign.lua:178 > validate_sign.lua:141: An error occurred during the firmware upgrade process. Details: add pss root certificate failed, code ffffffff

1970-01-01 00:28:23.247486 firmware_mgmt ERROR: validate_sign.lua(317): FirmwareUpgradeError: An error occurred during the firmware upgrade process. Details: add pss root certificate failed, code ffffffff

1970-01-01 00:28:23.248617 firmware_mgmt ERROR: task_instance.lua(159): parse package(S920S10X10_Update_CS_2P_cms.hpm) failed, ret:InvalidFirmwarePackage.

1970-01-01 00:28:23.343705 firmware_mgmt NOTICE: task_mgmt.lua(418): Update task[Id: 2729246890, StartTime: 1970-01-01T00:28:22+00:00, Progress: 0, State: Exception] successfully

1970-01-01 00:28:23.402782 firmware_mgmt ERROR: state_handle.lua(115): not find state obj

从日志看是验签失败,请问下有啥方式能绕过BIOS的验签吗?像升级openUBMC固件本身那样,绕过其签名机制

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

:books: 总结

项目 内容
问题类型 BIOS 固件升级失败,提示“无效的升级包”
根本原因 add pss root certificate failed → 签名证书无法加载
能否绕过验签 :cross_mark: 不支持,出于安全机制限制
推荐方案 使用 openUBMC 证书对 BIOS 包重新签名
辅助方案 安装缺失根证书、使用过渡包、检查资源树加载

:warning: 安全提醒:禁止在生产环境中禁用固件签名验证,以防引入恶意固件风险。

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

openUBMC 2509 升级 BIOS 固件失败问题分析与解决建议

根据您提供的日志信息,openUBMC 2509 在升级 BIOS 固件时提示“无效的升级包”,系统日志显示核心错误为:

add pss root certificate failed, code ffffffff

这表明固件升级流程在签名验证阶段失败,具体是由于无法添加 PSS 根证书所致。以下将结合上下文信息进行详细分析,并回答是否可以绕过 BIOS 验签的问题。


:magnifying_glass_tilted_left: 问题分析:升级失败的根本原因

:pushpin: 日志关键信息解读

  • add pss root certificate failed, code ffffffff
    此错误明确指出:系统在尝试加载固件包所需的 PSS(Probabilistic Signature Scheme)根证书 时失败。code ffffffff 通常表示底层操作异常或证书加载机制出错。

  • FirmwareUpgradeError: An error occurred during the firmware upgrade process.
    这是 firmware_mgmt 模块的标准错误响应,确认升级流程因验证失败而终止。

  • parse package(...) failed, ret:InvalidFirmwarePackage
    表明系统在解析 HPM 固件包时判定其为非法包,主要原因就是签名验证未通过。

结合文档知识库中的信息(如搜索结果 #4)可知,verify signature error 类型的错误通常由证书链不匹配、签名算法不兼容或根证书缺失引起。


:puzzle_piece: 根本原因推断

  1. 证书体系不匹配

    • openUBMC 使用的是自定义签名体系(如百敖证书),而您使用的 BIOS 包 S920S10X10_Update_CS_2P_cms.hpm 很可能是华为 iBMC 签名体系下的产物。
    • 若该 HPM 包使用 HW(华为)根证书签名,而当前 openUBMC 2509 环境未预置相应根证书或不支持 PSS 签名算法,则会导致 add pss root certificate failed
  2. 签名格式或算法兼容性问题

    • openUBMC 对固件包的签名格式有严格要求(如 CMS 或自定义结构)。
    • 如果 BIOS HPM 包使用了非标准或未被 openUBMC 支持的签名方式(如使用 RSA-PSS 而系统期望 PKCS#1 v1.5),也会导致证书加载失败。
  3. 环境处于“纯净”开源模式

    • openUBMC 是一个开源 BMC 实现,出于安全考虑,默认不允许无签名或未经信任的固件升级,尤其是对 BIOS、CPLD 等关键固件组件。

:red_question_mark: 是否可以绕过 BIOS 固件的签名验证?

:cross_mark: 结论:不建议且通常无法直接绕过 BIOS 固件的签名验证

以下是详细解释:

1. 与 openUBMC 自身升级机制不同

  • openUBMC 固件升级本身可“绕过签名” 的情况通常发生在:
    • 使用本地调试模式(如 Bingo 工具构建)
    • 通过命令行强制烧录(如 hpmtoolmflash
    • 在开发板上禁用验签标志位(需修改启动参数或配置)
  • 但这些方法适用于 BMC 自身固件升级流程,并不作用于 BIOS 固件升级过程

参见知识库内容:BIOS upgrade 是通过 firmware_mgmt 服务管理,需经过完整的验证流程(解压 → 验签 → 加载资源树 → 写入 Flash)。不支持“保留配置升级”时若资源树未加载即会失败。

2. BIOS 固件升级强制依赖签名验证

  • 根据搜索结果文档 #4 “固件升级机制及常见问题” 中明确指出:

    验签失败 是导致 “无效升级包” 的常见原因,且系统会直接返回 InvalidFirmwarePackage

  • firmware_mgmt 组件设计原则是保障固件完整性与安全性,不允许跳过签名检查环节。
  • 即使尝试修改 Lua 脚本(如 validate_sign.lua),也会因签名库由底层 C 模块实现而无法生效。

3. 硬件级防护限制

  • 当前服务器平台(如 S920X20)的 BIOS 升级通常受 PFR(Platform Firmware Resilience)或 TPM 安全启动机制 保护。
  • 即使 BMC 层面允许加载无签名 BIOS,硬件控制器仍可能拒绝写入。
  • openUBMC 生态强调安全合规,默认不允许此类绕过行为。

:white_check_mark: 推荐解决方案

:white_check_mark: 方案一:重新签名 BIOS 固件包(推荐)

参照知识库中用户 百敖_蒋超 的案例,使用 openUBMC 的签名工具链对 BIOS HPM 包进行重新签名。

操作步骤:

  1. 获取 openUBMC 的签名工具和根证书(通常为 .pem.cer 文件)。
  2. 使用 hpm-sign 或类似工具对原始 BIOS 包进行重新签名:
    hpm-sign --input S920S10X10_Update_CS_2P_cms.hpm \
             --output signed-bios.hpm \
             --cert openubmc_root.cer \
             --key private.key
    
  3. 将签名后的 signed-bios.hpm 上传至 openUBMC 进行升级。

注:可借助 Bingo 构建工具(bingo gen)生成符合 openUBMC 规范的签名固件包。


:white_check_mark: 方案二:确认并安装缺失的 PSS 根证书

如果目标 BIOS 包必须使用原厂签名:

  1. 提取 HPM 包头部信息,查看其签名证书的 CommonName(CN)

    strings S920S10X10_Update_CS_2P_cms.hpm | grep -A10 "CMS"
    
  2. 将对应的 PSS 根证书文件 推送到 openUBMC 系统中:

    • 通常位于 /opt/bmc/etc/certs//etc/ssl/certs/
    • 重启 firmware_mgmt 服务以加载新证书。
  3. 或通过 Redfish API 注册受信任的证书:

    POST /redfish/v1/UpdateService/Actions/Oem/Huawei_UpdateService.AddTrustedCertificate
    {
      "Certificate": "-----BEGIN CERTIFICATE-----..."
    }
    

:white_check_mark: 方案三:使用过渡包或中间版本

参考知识库中 #Q6 案例:

  • 若当前环境存在旧版本 BMC 固件冲突或资源树不完整(如 /bmc/kepler/Systems/1/Bios 未加载),可先升级一个 兼容的过渡 HPM 包,建立正确的证书链与资源结构。
  • 再升级目标 BIOS 固件。

特别注意:天池模组等特殊环境需确保 bcu 相关资源树正确加载,否则 BIOS 升级准备阶段即失败(见搜索结果 #6)。


:hammer_and_wrench: 进一步排查建议

  1. 检查 /bmc/kepler/Systems/1/Bios 是否存在

    obmcutil getobj /bmc/kepler/Systems/1/Bios
    

    若不存在,说明 BIOS 监控组件未启动或资源树未加载。

  2. 检查系统是否已加载正确证书
    查看 /opt/bmc/etc/certs/ 目录下是否有 openUBMC 或华为相关根证书。

  3. 尝试通过命令行升级以获取更详细日志

    hpmtool -u S920S10X10_Update_CS_2P_cms.hpm
    
  4. 查看完整日志路径

    • /var/log/app.log
    • /var/log/app_debug_log_all

:books: 总结

项目 内容
问题类型 BIOS 固件升级失败,提示“无效的升级包”
根本原因 add pss root certificate failed → 签名证书无法加载
能否绕过验签 :cross_mark: 不支持,出于安全机制限制
推荐方案 使用 openUBMC 证书对 BIOS 包重新签名
辅助方案 安装缺失根证书、使用过渡包、检查资源树加载

:warning: 安全提醒:禁止在生产环境中禁用固件签名验证,以防引入恶意固件风险。

如需进一步协助,请提供 BIOS HPM 包的签名证书信息或 openUBMC 当前证书配置情况。

相关链接:

  1. 使用openubmc进行bios固件升级,提示无效的升级包
  2. OpenUBMC2506 BMC固件升级失败
  3. 我按照“从零开始,玩转openUBMC”搭建环境没有hpm_signer工具,怎么制作和生成过度包?
  4. BMC 3.xx.xx.xx版本升级openubmc指导
  5. bios | 文档中心 | openUBMC

当前暂无法实现
openUBMC固件是无签名无加密模式的升级包,因此openUBMC升级是跳过验签+解密模式。
BIOS固件包是有签名+解密模式的升级包,即使想办法跳过签名,升级包也会因为无法解密而失败
有相关诉求建议上一下Security SIG或bmc_core SIG例会

嗯嗯,好的,感谢