arch
(Evan(bx))
2025 年8 月 21 日 02:20
1
背景与现象
我们在做包升级互通性测试时,发现与“bmcgo 包不应升级任何其他来源包”的理解存在不一致的实测结果。为尽快定位,想请教:该问题可能是哪里问题?同时需要明确签名校验相关代码位置 以及调试方式 ,以便自查和供后续提单参考。
实测结论(简表)
来源包 → 目标包 预期:应拒绝 实测:结果
bmcgo(A) → bingo(B) 拒绝 ✅ 允许(升级成功)
bmcgo(A) → hw(C) 拒绝 ❌ 拒绝(与预期一致)
bmcgo(A) → 社区包(D) 拒绝 ✅ 允许(升级成功)
bingo(B) → bmcgo(A) 拒绝 ❌ 拒绝(与预期一致)
bingo(B) → hw(C) 拒绝 ❌ 拒绝(与预期一致)
bingo(B) → 社区包(D) 拒绝 ✅ 允许(升级成功)
社区包(D) → bmcgo(A) 拒绝 ❌ 拒绝(与预期一致)
社区包(D) → hw(C) 拒绝 ❌ 拒绝(与预期一致)
社区包(D) → bingo(B) 拒绝 ✅ 允许(升级成功)
hw(C) → 社区包(D) 拒绝 ❌ 拒绝(与预期一致)
注:社区包来自官方下载页 openUBMC
以上为本人实测验证 结果。
想确认的重点
上述行为是设计特例 还是不符合预期 ?
请求指引:代码位置与调试方法
为便于我们自行排查,烦请指引以下信息(越具体越好):
仓库 & 路径 :web升级选项的负责固件解析与签名校验 的模块。
关键函数/入口 : 实际函数名与调用链入口。
日志位置 :该模块的日志默认输出到何处
复现摘要
运行基线:A = bmcgo 生成openubmc版本 ,旧的ca openssl签发的证书
目标包:B = bingo 签名包(我方生成,新的ca签发的证书,云签) 、C = hw 包 、D = 社区二进制包
升级方式:<WebUI>
结果:A→B 成功;A→C 拒绝;A→D 成功;B→A 拒绝;B→C 拒绝;B→D 成功;D→A 拒绝;D→C 拒绝;D→B 成功;C→D 拒绝。
环境信息(简要)
openUBMC:/->ipmcget -d version
------------------- openUBMC INFO -------------------
IPMC CPU: Hi1711
IPMI Version: 2.0
Active openUBMC Version: 55.05.00.08
Active openUBMC Build: 001
Active openUBMC Built: 10:17:18 Aug 14 2025
Backup openUBMC Version: 55.05.00.08
Available openUBMC Version: 25.06.00.01
Available openUBMC Build: 01
设备/平台:标准机型
固件基线:<25.6(已发布)&25.09(未发布)>
先行感谢!我们主要希望尽快拿到代码位置 与调试方法 ,便于后续自行深挖与提交更精确的问题单。
arch
(Evan(bx))
2025 年8 月 21 日 03:27
2
https://www.openubmc.cn/download
社区25.06包唯一证书清单如下,二进制hpm包下载链接如上。由于论坛的字符解析机制,部分连续字符会被误识别为表情或标签,因此在一些位置手动补充了空格,以保证显示的完整性。
角色
Subject(CN)
Issuer(CN)
NotAfter (GMT)
SHA-256 指纹
Root
Huawei Root CA
Huawei Root CA (自签)
2050-10-15 08:08:50
A9:D5:49:E2:14:C1:F8:A2:97:07:90:82:C8:EC:F3:6B:EA:53:9D:AB :A3:1C:7D:56:88:AA:BB:C7:AB :9C:CB:C2
代码签名中间 CA(当前)
Huawei Code Signing Certificate Authority 2
Huawei Root CA
2029-06-27 07:40:22
95:B7:6D:6D:B0:F2:D9:5D:19:B9:70:40:DA:AF:09:82:F4:90:B2:DE :87:05:B7:2A:FB:62:B8:C4:BC:D8:B3:9E
代码签名中间 CA(旧)
Huawei Code Signing Certificate Authority
Huawei Root CA
2025-10-15 10:22:22
DF:62:F6:09:F8:82:52:56:EE:F4:EA:F9:17:7F:CE:89:04:92:7D:1A:31:4C:D1:A6:F2:6C:B4:F6:99:96:EE:63
代码签名终端(EE)
Computing Product Line Code Signing Certificate 5 (OU=Computing Product Line)
Huawei Code Signing Certificate Authority 2
2028-06-13 02:07:12
C4:7B:D5:F7:D5:9C:52:D5:8F:2B:29:D1:4E:74:2B:07:DD:F3:12:3D:86:A9:DC:CC:B1:6C:70:E2:E6:C7:37:F1
时间戳中间 CA(当前)
Huawei Timestamp Certificate Authority 2
Huawei Root CA
2029-06-27 03:41:28
2F:48:10:83:40:FF:EC:F6:01:F7:F1:83:DD:FA:64:52:29:84:FD:44:72:43:80:BF:F8:EA:FC:2C:2D:7A:84:2D
时间戳中间 CA(旧)
Huawei Timestamp Certificate Authority
Huawei Root CA
2025-10-15 10:54:00
DE:94:52:75:BA:72:B3:61:04: CD:74:3B:2D:57:95:A2:03:54:C2:37:EF:4B:AD:08:4D:91:82:6D:1A:F1:B9:E4
时间戳终端(EE)
Huawei Time Stamping Signer 3
Huawei Timestamp Certificate Authority 2
2028-04-24 03:09:00
9C:94:C0:E7:B9:BA:8E:3B:0F:36:37:1F:41:DC:B7:C8:C9:45:86:3F:26:A3:20:A9:D6:1D:44:86:5E:33:58:06
arch
(Evan(bx))
2025 年8 月 21 日 03:34
3
我们bingo 生成的包提取的唯一证书清单,去重后得出以下
角色
Subject(CN)
Issuer(CN)
NotAfter (GMT)
SHA-256 指纹
Root
Hefeibaixin EnterpriseIT Root CA
Hefeibaixin EnterpriseIT Root CA
2050-03-22 12:14:05
B5:1F:13:7F:BC:6E:EC:7F:5E:C1:02:4B:1B:6C:6D:0A:A1:58:4E:E0:26:27:6F:BC:E2:22:FB:F1:F2:81:AA:AB
代码签名 EE
baixin_code_sign
Hefeibaixin EnterpriseIT Root CA
2027-08-13 05:47:09
5D:F9:E6:E2:23:6F:94:D3:C9:B0:C4:1F:D6:02:BE:C6:CA:8B:B7:4B:7D:5A:7D:3C:87:35:0F:9E:76:06:0D:D2
时间戳 EE
baixin time stamp
Hefeibaixin EnterpriseIT Root CA
2027-03-27 02:06:52
D1:D9:87:CE:AD:55:94:58:CF:8A:3D:77:A2:27:65:67:F1:C6:9F:1F:E6:A3:1A:CA:10:C0:EF:86:A2:3D:3E:EE
arch
(Evan(bx))
2025 年8 月 21 日 03:38
4
这是我们通过 bmcgo 生成的包中提取出的证书清单。证书字段里出现的 Huawei 仅为当时参考教程时使用 OpenSSL 临时生成的测试证书,无任何实际关联性。
另外,由于论坛字符解析机制的限制,部分连续字符可能会被误识别为表情或标签,因此在展示时对部分位置手动添加了空格,以确保内容完整、可读。
角色
Subject(CN)
Issuer(CN)
NotAfter (GMT)
SHA-256 指纹
代码签名 EE
Huawei EnterpriseIT S1
Huawei EnterpriseIT Root CA
2025-12-12 08:24:49
BA:13:67:C0:18:80:1D:0C:E6:01:DA:2F:57:48:27:B4:E9:C8:86:0E:2A:BE:E9:75:36:1D:D4:91:95:E4:30:98
时间戳 EE
Huawei EnterpriseIT Timestamp Certificate
Huawei EnterpriseIT Root CA
2044-12-07 08:31:56
9B:B9:49:9D:B0:8D:5F:5B:7C:2A:CA:02:E2:66:7D:B9:F2:80:E3:7E: AB:2C:8E:10:50:9F:52:01:A3:4F:53:89
arch
(Evan(bx))
2025 年8 月 21 日 06:03
5
Larry_Li
(LiJiang)
2025 年8 月 21 日 06:25
6
涉及升级相关的组件未开源在社区。
可以在app.log里搜索firmware_mgmt和bmc_upgrade组件关键字。
确认下A、B包的manifest.yml构建配置,社区的配置为firmware_mgmt的community_enable为true,表示不进行签名校验。
- conan: firmware_mgmt
options:
community_enable: true
如果要签名校验,参考:
https://discuss.openubmc.cn/t/topic/1665
arch
(Evan(bx))
2025 年8 月 21 日 06:30
7
我们bmcgo的manifest配置显示是这样。目前是bmcgo,可以随意升级社区包,但是bingo包不能直接升级bmcgo包,bingo 和bingo可以互相升级
arch
(Evan(bx))
2025 年8 月 21 日 08:49
9
大佬厉害,改成false是升不了了。还在验证过渡包能不能升
arch
(Evan(bx))
2025 年8 月 21 日 10:26
10
Larry_Li:
community_enable: false
我在 manifest.yml 同级目录下放置了 rootfs/opt/bmc/trust/partner/rootca.der,打包生成过渡固件并成功升级。
之后再使用新的签名包进行升级时,升级失败,日志如下所示:
使用
hpm_verify 对升级包进行本地校验时能够正常通过,但在实际 BMC 升级过程中仍然失败。日志如下:
2025-08-21 10:22:02.901128 firmware_mgmt NOTICE: validate_sign.lua(153): the custom ca certificate is exist, load custom certificate
2025-08-21 10:22:02.911830 firmware_mgmt WARNING: init.lua(97): nil:294 > validate_sign.lua:-1 > validate_sign.lua:172: An error occurred during the firmware upgrade process. Details: verify signature error, code 88200004
2025-08-21 10:22:02.912201 firmware_mgmt ERROR: validate_sign.lua(296): FirmwareUpgradeError: An error occurred during the firmware upgrade process. Details: verify signature error, code 88200004
现象总结:
构建时候hpm_verify 工具本地校验通过,说明签名结构在工具规则下是正确的。
实际 BMC 升级时失败,表明 BMC 内部的升级签名校验逻辑与 hpm_verify 并不完全一致 。
升级过程中,BMC 会加载自定义 CA,对 HPM 包中的签名块执行 校验,并且可能对证书结构有额外要求。
疑问:
由于我使用的是 非 OpenSSL 搭建的证书服务 生成的根证书,可能在证书结构或扩展属性上和 OpenSSL 生成的证书存在差异。
想确认下:
校验失败是否可能与 RootCA 的结构不匹配有关?
Larry_Li
(LiJiang)
2025 年8 月 21 日 11:13
11
查询了一下88200004错误码表示的是CERT_ISSUER_NOT_FOUND。
arch
(Evan(bx))
2025 年8 月 21 日 13:20
14
arch
(Evan(bx))
2025 年8 月 22 日 02:30
16
Larry_Li:
CERT_ISSUER_NOT_FOUND
证书信息.pdf (192.2 KB)
这是我的证书信息。 证书简表(关键信息),目前重新创建了时间戳证书后,还是一模一样的报错
均为证书文本,不含任何私钥
是不是和原来的证书也有关联,我这个不是PSS的。我再去重新创建根CA,
arch
(Evan(bx))
2025 年8 月 22 日 07:06
17
Larry_Li:
CERT_ISSUER_NOT_FOUND
我的所有证书改成pss后,校验过了,确实是因为pss问题。但是有了新的错误
bmc_core ERROR: RSA_private_decrypt failed
… hpm_package.lua: decrypt srcfile failed, rsa_decrypt failed
… Details: Upgrade write config file failed
为啥会这样,我好像参数里面没填加密事情
Larry_Li
(LiJiang)
2025 年8 月 22 日 07:18
18
报错显示的是 解密 conf.tar.gz 失败。
原因是当环境上的firmware_mgmt组件的community_enable为fasle时,在升级时会解密升级hpm包里的conf.tar.gz。 如果没有经过加密,就会解密失败。
arch
(Evan(bx))
2025 年8 月 22 日 07:25
19
了解了,感谢解答 。
也就是说当 community_enable=false 时,升级流程会强制要求 conf.tar.gz 是加密的 。
如果没加密,BMC 仍然会尝试解密,结果就直接报错。
这次问题的根因就是我打的包里 conf.tar.gz 没做加密。
Awesome!
arch
(Evan(bx))
2025 年8 月 22 日 10:54
21
感谢 Larry_Li,大佬就是稳!
Respect, you’re the real MVP!
@Larry_Li
你好,我在米尔Hi3093开发板上升级签名包时,显示升级失败。app.log中报错如下:
请问有遇到过这种报错吗?这个可能是什么原因导致?