答案内容由AI生成,仅供参考:
总结
您无法成功升级的根本原因是:
使用了过期或无效的 CRL吊销列表文件(cms.crl)
解决方案是:
替换
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包包含以下关键组件:
- File List:固件文件清单
- CMS Sign:数字签名数据
- CRL文件:证书吊销列表(关键!)
- 固件内容:实际的CPLD固件镜像
其中,CRL文件(cms.crl)必须与签名根证书完全匹配,并且处于有效期内,否则会导致PSS验证失败。
解决方案
正确的签名流程(适用于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并重新签名 |
最佳实践建议
- 维护完整的私有CA环境,定期生成新的CRL
- 每次重签名前,确认
cms.crl是否仍在有效期内(建议≤7天) - 若使用华为CA,访问华为PKI支持页获取最新CRL
- 使用
openssl crl -text命令验证CRL文件 - 确保
cms.crl文件名正确无误,并放入打包脚本执行目录
总结
您无法成功升级的根本原因是:
使用了过期或无效的 CRL吊销列表文件(cms.crl)
解决方案是:
替换
cms.crl为与签名根证书配对、且未过期的最新CRL文件。
此文件不能由 hpm_signer 自动生成,必须由CA持有者使用OpenSSL等工具主动签发并维护。只要确保 cms.crl 为最新有效版本,即可顺利完成HPM包重新签名并成功升级CPLD固件。
相关链接: