答案内容由AI生成,仅供参考:
如何使用签名根证书更新 CRL 吊销列表文件?
根据您提供的 《hpm包格式说明以及重新签名指导》 内容,CRL吊销列表 是 HPM 签名包的重要组成部分,用于验证签名证书在签发时是否已被吊销。您遇到的问题——“生成的 bios.hpm 无法成功更新”——很可能是由于 CRL(证书吊销列表)文件过期或无效导致的签名校验失败。
核心问题解析
文档中提到:
“使用hpm_signer工具生成新的签名cms文件,同时需要签名根证书最新的CRL吊销列表文件。”
这说明 CRL吊销列表(即 cms.crl 文件)必须是最新的有效版本,否则升级过程会在验证 CMS 签名时失败。
但该文档本身并未提供生成或更新 CRL 的方法,这是因为 CRL 文件通常由证书颁发机构(CA)周期性生成,不在最终 HPM 打包流程中动态创建。
正确做法:如何获取并使用最新的 CRL 文件
要解决您的问题,必须确保使用的 rootca.crl 文件是最新的、有效的。
以下是基于 OpenUBMC 和 BMCGo 生态 的标准化操作流程。
第一步:理解 CRL 文件来源
| 文件名 |
说明 |
rootca.crl |
是根CA颁发的 证书吊销列表(Certificate Revocation List),由您的私有CA(或华为/合作伙伴CA)定期签发。 |
cms.crl |
在 HPM 包中固定命名为 cms.crl,其内容就是 rootca.crl。 |
hpm_signer 和 cms_sign_hpm.sh 不会自动生成 CRL 文件,必须手动维护最新版。
第二步:获取签名根证书对应的最新 CRL 文件
情况一:使用您自己搭建的私有 CA
如果您使用 OpenSSL 或其他私有 CA 工具链来管理 rootca.der 和 signer.pem,则应使用以下命令生成新的 CRL 文件:
# 使用私有CA密钥和配置文件生成CRL
openssl ca -gencrl -config openssl.cnf -out rootca.crl -keyfile rootca.key -passin pass:your_password
或如果已有 CRL 配置目录:
# 更新 CRL 列表
openssl ca -gencrl -out rootca.crl -crldays 7
此操作需要您作为 CA 运营者具备:
- 根CA私钥 (
rootca.key)
- CA 配置文件 (
openssl.cnf)
- 权限执行 OpenSSL 命令
生成后,将二进制 DER 格式的 CRL 写入(如需要):
# 转换为 DER 格式(OpenUBMC 要求)
openssl crl -in rootca.crl -outform DER -out rootca.crl
情况二:使用华为官方或合作伙伴 CA
如果您的签名根证书是 从华为提供的信任链衍生而来(如 Huawei Integrity Root CA - G2),请从以下方式下载官方 CRL:
推荐链接:
https://support.huawei.com/pki/pkidetail!loadCatagoryPkiData.action?type=PKI_TYPE-ROOT
在此页面可以找到与“Huawei Integrity Root CA - G2”对应的 CRL 下载选项。
若您使用的是合作方自建 CA,请联系对应团队确认 CRL 生成机制。
第三步:更新打包流程中的 cms.crl 文件
完成 CRL 文件更新后,在重新签名 HPM 包时,请确保以下步骤使用最新的 rootca.crl:
# 剥离原始 HPM 包内容
dd if=bios.hpm of=name.filelist bs=1 skip=56 count=129
dd if=bios.hpm of=name.filelist.cms bs=1 skip=185 count=3505
dd if=bios.hpm of=cms.crl bs=1 skip=3690 count=683 # ← 原始旧CRL(需替换)
dd if=bios.hpm of=bios.bin bs=1 skip=4373
# 替换为最新的 CRL 文件! ← 关键步骤
cp /your/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 bios.hpm
# 重命名以符合升级要求
mv name.hpm.signed bios.hpm
特别注意:
cms.crl 不是由 hpm_signer 生成的。
- 它必须是与当前签名根证书 配对且未过期 的 CRL。
- CRL 过期会导致
add pss root certificate failed 等错误(常见于日志 app.log 中)。
第四步:验证 CRL 文件有效性
可以用 OpenSSL 检查 CRL 是否有效:
# 查看 CRL 内容(文本格式)
openssl crl -in cms.crl -inform DER -text -noout
# 输出示例关注字段:
# Last Update: ...
# Next Update: ... ← 必须晚于当前时间!
# Signature Algorithm: ...
若 Next Update 已过期,则此 CRL 不可用于签名验证。
第五步:检查 BMC 系统日志定位问题
若升级失败,请查看运行日志定位根本原因:
tail -f /var/log/app.log | grep firmware_mgmt
常见报错及含义:
| 日志信息 |
原因分析 |
add pss root certificate failed |
CRL 文件无效、格式错误或签名算法不匹配(PSS vs PKCS#1v1.5) |
Certificate has been revoked |
当前使用的 signer 证书已被列入 CRL |
Invalid signature |
hpm_signer 参数错误或密钥不匹配 |
CMS_verify failed |
CRL 缺失、过期或 CA 根未被信任 |
最佳实践建议(总结)
| 步骤 |
操作 |
| 1 |
维护一套完整的私有 CA 环境,能定期生成新 CRL |
| 2 |
每次重签名前,确认 cms.crl 是否仍在有效期内(建议 ≤7 天) |
| 3 |
若使用 Huawei CA,访问 华为PKI支持页 获取最新 CRL |
| 4 |
使用 openssl crl -text 验证 CRL 文件 |
| 5 |
将正确文件名 cms.crl 放入 cms_sign_hpm.sh 执行目录 |
| 6 |
使用 app.log 和 ParseFirmwarePackage 排查签名校验失败原因 |
参考文档链接
-
华为 PKI 根证书下载:
https://support.huawei.com/pki/pkidetail!loadCatagoryPkiData.action?type=PKI_TYPE-ROOT
-
hpm_signer 工具手册(来自知识库):
该工具依赖 hpm_signer工具 + tsa.cnf + signer.pem + 有效的 rootca.crl
-
OpenUBMC 固件验证逻辑:
调用 ParseFirmwarePackage 方法解析 HPM 包,并进行 CMS 验签和 CRL 吊销校验。
结论
您无法成功升级的根本原因是:
使用了过期或无效的 CRL吊销列表 文件(cms.crl)
解决方案是:
替换 cms.crl 为与签名根证书配对、且未过期的最新 CRL 文件。
该文件不能由 hpm_signer 自动生成,必须由 CA 持有者(您或您的团队)使用 OpenSSL 等工具主动签发并维护。
只要确保 cms.crl 为最新有效版本,配合正确的 signer.pem 和时间戳配置,即可顺利完成 HPM 包的重新签名并成功升级。
相关链接:
- hpm包格式说明以及重新签名指导
- 社区工程能力每日答疑纪要
- 编译白牌包被跳过,不出白牌包
- hpm签名包升级失败
- openUBMC