重签名的hpm CMS 签名文件验证失败

问题描述

已完成manifest自签名配置及rootca.der签名文件预制进入/opt/bmc/trust/partner文件。

根据这个重签名指导生成的hpm文件升级报错如下,请问可能是哪个步骤不对?
hpm包格式说明以及重新签名指导 - CICD SIG - openUBMC 论坛

1970-01-01 00:09:09.030649 firmware_mgmt ERROR: validate_sign.lua(345): cms_verify_file_checksum fail
1970-01-01 00:09:09.031624 firmware_mgmt ERROR: task_instance.lua(253): parse package(name.hpm) failed, ret:InvalidFirmwarePackage.

答案内容由AI生成,仅供参考:
根据您提供的错误日志 cms_verify_file_checksum fail,这表示对 CMS 签名文件的校验和验证失败,属于 InvalidFirmwarePackage 类型错误,通常是因为固件包未通过完整性或签名验证导致的。结合上下文信息,可能的原因和排查建议如下:


可能的原因

可能原因 相关上下文
1. 签名证书不匹配
您自签名的根证书或 CRL 文件与板载信任证书不一致。
- topic 2575 中讨论根证书解析失败导致升级出错,强调自签名证书必须与系统信任列表匹配。
2. 签名算法不兼容
openUBMC 不同版本对签名算法要求不同(V2 仅支持 PKCS,V3 需 PSS)。
- 知识图谱中 Signature Verification 节点描述:“V2 supporting only PKCS, while V3 requires PSS.”
3. 重签名步骤遗漏或顺序错误
手动执行社区指导(topic 204)时可能遗漏关键操作(如未正确生成 CMS 签名、未校验 checksum、打包参数错误)。
- 社区指导链接已提供。
- 搜索结果 9 指出 bingo hpm_signer 命令可自动化重签名流程,避免手工出错。
4. manifest.yml 配置不正确
签名升级包可能需要修改 manifest.yml 中的签名相关选项。
- topic 2575 回贴中明确:“制作签名升级包时,需要修改 manifest.yml”。
5. 过渡包与签名包的配合问题
若先升级了过渡包,过渡包可能只接受特定签名的包,且信任证书需通过过渡包正确安装。
- topic 2575 提到:“过渡包只能升级带签名的包”。

排查与修复建议

  1. 验证证书一致性
    对比板卡 /opt/bmc/trust/partner/ 目录中的证书与签名使用的根证书 (rootca.der/rootca.pem) 及 CRL 文件,确保完全一致(尤其注意证书有效期和指纹)。

  2. 确认签名算法
    查看系统版本对应的签名算法要求(参见 Signature Verification 节点描述),在签名命令中指定正确的算法参数(如 -pss-pkcs)。

  3. 检查 CMS 签名文件完整性
    检查签名后生成的 .cms 文件及其 .cms.sha256 校验和(知识图谱中 Example.img.cms.sha256 指明该校验和用于验证),确保文件未损坏且校验和匹配。

  4. 使用自动化工具重签名
    推荐使用 bingo hpm_signer 命令(搜索结果 9 介绍)代替手工操作,该命令集成了签名、打包等步骤,可减少人为失误:

    bingo hpm_signer <hpm_file> --ca-dir /home/your_ca_dir
    
  5. 检查 manifest.yml 配置
    若需社区签名功能,确认配置如 community_sign_webvnc_1711 是否正确(见 topic 7041 中的讨论)。错误配置可能导致系统期望签名但实际无签名。

  6. 结合日志详细错误码分析
    知识图谱中 FirmwareUpgradeError 关联错误码 88200004(签名验证失败),您的日志可能包含类似代码,可据此进一步定位。


如果上述步骤仍无法解决,建议在社区论坛(如 topic 2575)提供完整的 app.log 日志、签名配置及 manifest.yml 内容,以便获得更针对性的分析。

使用bingo hpm_signer

Sign /home/workspace/resinger/hpm_tmp/image.filelist start
Call EVP_DecryptFinal_ex with error
Error Signing Data:
error:1C80006B:Provider routines::wrong final block length
ERROR: >>> ERROR: 重新签名失败!

建议按照AI给的建议分析和验证。