CPLD hpm包签名后在web上升级时提示升级失败

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

总结

您无法成功升级的根本原因是:

使用了过期或无效的 CRL吊销列表文件(cms.crl)

解决方案是:

:white_check_mark: 替换 cms.crl 为与签名根证书配对、且未过期的最新CRL文件。

此文件不能由 hpm_signer 自动生成,必须由CA持有者使用OpenSSL等工具主动签发并维护。只要确保 cms.crl 为最新有效版本,即可顺利完成HPM包重新签名并成功升级CPLD固件。

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

CPLD HPM包签名后Web升级失败问题分析与解决方案

问题概述

在OpenUBMC2503系统中对CPLD HPM包进行签名后,通过Web界面升级时提示"升级失败"。日志显示关键错误信息为 “add pss root certificate failed, code fffffff”,导致固件包解析失败(parse package failed, ret:InvalidFirmwarePackage)。


根本原因分析

根据日志和相关技术文档分析,该问题的根本原因是:

CPLD HPM包使用的签名算法与系统信任的根证书不匹配

具体表现为:

  • 升级包使用了PSS填充模式的RSA签名算法(在日志中明确指出 add pss root certificate failed
  • 系统缺少正确配对且有效的证书吊销列表(CRL)文件,或CRL已过期、格式错误
  • OpenUBMC系统在验证HPM包签名时,需要完整的证书链和有效CRL来完成PSS签名验证,否则会拒绝升级包

关键证据来自日志片段:

2026-02-03 10:07:58.924410 firmware_mgtm WARNING: init.lua(97): nil:-1 > validate_sign.lua:178: An error occurred during the firmware upgrade process. Details: add pss root certificate failed, code fffffff

详细技术背景

PSS vs PKCS#1v1.5 签名模式

特性 PSS 模式 PKCS#1v1.5 模式
安全性 更高,推荐使用 较老,安全性较低
OpenUBMC支持 需要完整CRL支持 兼容性更好
常见错误 add pss root certificate failed verify signature error

HPM包结构与签名机制

HPM包包含以下关键组件:

  1. File List:固件文件清单
  2. CMS Sign:数字签名数据
  3. CRL文件:证书吊销列表(关键!)
  4. 固件内容:实际的CPLD固件镜像

其中,CRL文件(cms.crl)必须与签名根证书完全匹配,并且处于有效期内,否则会导致PSS验证失败。


解决方案

:white_check_mark: 正确的签名流程(适用于PSS模式)

第一步:准备有效的CRL文件

# 如果使用自建CA,生成新的CRL(确保证书未过期)
openssl ca -gencrl -out rootca.crl -config openssl.cnf

# 如果使用华为官方CA,请从以下链接下载最新CRL:
# https://support.huawei.com/pki/pkidetail!loadCatagoryPkiData.action?type=PKI_TYPE-ROOT
# 下载对应 "Huawei Integrity Root CA - G2" 的CRL文件

第二步:提取并替换HPM包中的CRL

# 剥离原始HPM包内容
dd if=ubmc_S920X20-EXU-CPLD_5.06.hpm of=name.filelist bs=1 skip=56 count=129
dd if=ubmc_S920X20-EXU-CPLD_5.06.hpm of=name.filelist.cms bs=1 skip=185 count=3505
dd if=ubmc_S920X20-EXU-CPLD_5.06.hpm of=cms.crl bs=1 skip=3690 count=683
dd if=ubmc_S920X20-EXU-CPLD_5.06.hpm of=cpld.bin bs=1 skip=4373

# 替换为最新的 CRL 文件 ← 关键步骤
cp /path/to/latest_rootca.crl cms.crl

# 使用 hpm_signer 重新生成 CMS 签名
hpm_signer -s signer.pem -t ts_signer.pem -T tsa.cnf -i name.filelist -o name.filelist.cms

# 使用 cms_sign_hpm.sh 重新打包
cms_sign_hpm.sh 2 ubmc_S920X20-EXU-CPLD_5.06.hpm

# 重命名最终输出
mv name.hpm.signed ubmc_S920X20-EXU-CPLD_5.06.hpm

第三步:验证CRL有效性

# 查看CRL是否有效
openssl crl -in cms.crl -inform DER -text -noout

# 检查输出中的关键字段:
# Last Update: ...(上次更新时间)
# Next Update: ... ← 必须晚于当前时间!

验证方法

方法一:检查HPM包头部信息

# 使用head命令查看HPM头部是否有正确的CA标识
head ubmc_S920X20-EXU-CPLD_5.06.hpm

# 正常应包含类似信息:
# Huawei Integrity Root CA - G2
# 或您的自定义CA名称

方法二:查看系统日志

# 实时监控升级过程日志
tail -f /var/log/app.log | grep firmware_mgtm

常见错误对照表

日志信息 原因分析 解决方案
add pss root certificate failed CRL无效、格式错误或签名算法不匹配 替换为有效CRL文件
Certificate has been revoked 签名证书已被吊销 更换signer证书
Invalid signature hpm_signer参数错误或密钥不匹配 检查signer.pem是否正确
CMS_verify failed CRL缺失、过期或CA根未被信任 更新CRL并重新签名

最佳实践建议

  1. 维护完整的私有CA环境,定期生成新的CRL
  2. 每次重签名前,确认cms.crl是否仍在有效期内(建议≤7天)
  3. 若使用华为CA,访问华为PKI支持页获取最新CRL
  4. 使用openssl crl -text命令验证CRL文件
  5. 确保cms.crl文件名正确无误,并放入打包脚本执行目录

总结

您无法成功升级的根本原因是:

使用了过期或无效的 CRL吊销列表文件(cms.crl)

解决方案是:

:white_check_mark: 替换 cms.crl 为与签名根证书配对、且未过期的最新CRL文件。

此文件不能由 hpm_signer 自动生成,必须由CA持有者使用OpenSSL等工具主动签发并维护。只要确保 cms.crl 为最新有效版本,即可顺利完成HPM包重新签名并成功升级CPLD固件。

相关链接:

  1. hpm签名包升级失败
  2. web上无法更新BIOS、BMC等固件包
  3. 使用openubmc进行bios固件升级,提示无效的升级包
  4. 伙伴openubmc版本如何支持升级华为签名固件版本和伙伴自己签名的固件版本均能成功?
  5. openUBMC