关于0.6.169版本bingo的hpm_signer签名异常的一问题

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

:white_check_mark: 总结

项目 内容
问题本质 Bingo 0.6.169 版本中集成的 hpm_signer 对 PEM 证书格式校验更严格,导致原有证书无法加载
直接原因 error:0480006C:PEM routines::no start line 表示 PEM 文件头无效,极可能是格式不合规或加密 PEM 不受支持
根本原因 hpm_signer 工具被更新,行为发生不兼容变更
验证成功方案 使用旧版本 hpm_signer 可正常签名 → 确认为工具问题
推荐解决路径 1. 修复 PEM 文件格式
2. 或降级 hpm_signer
3. 同步反馈社区推动文档/兼容性更新
点击此处查看详细分析解答

关于 Bingo 0.6.169 版本中 hpm_signer 签名异常的问题分析与解决方案

根据您提供的详细问题描述和环境对比,以下是针对 Bingo 0.6.169 版本中 hpm_signer 签名失败导致 error:0480006C:PEM routines::no start line 错误 的全面分析与解决建议。


:magnifying_glass_tilted_left: 问题概述

在使用 Bingo 0.6.169 版本进行 BMC 固件构建时,调用 hpm_signer 对文件(如 rootfs_iBMC.img)进行签名操作时报错:

Error Signing Data:
error:0480006C:PEM routines::no start line

而相同证书和操作在 Bingo 0.6.159 环境下可正常运行。
进一步验证发现:将 0.6.159 版本中的 hpm_signer 工具替换到 0.6.169 环境后,签名恢复正常。


:bar_chart: 核心原因分析

:white_check_mark: 错误码含义:error:0480006C:PEM routines::no start line

该 OpenSSL 错误表明程序尝试读取一个 PEM 格式的私钥或证书文件时,未能识别出合法的 PEM 头部(如 -----BEGIN PRIVATE KEY-----),常见原因包括:

  • 文件内容为空或损坏
  • 文件编码格式不正确(例如被保存为 UTF-8 with BOM、包含不可见字符)
  • 实际是 DER 格式但被当作 PEM 使用
  • 文件路径指向了错误的内容(如文本说明而非密钥数据)

:warning: 在您的案例中,文件本身是正常的(在旧版本工具中能成功使用),因此根本原因不是证书文件问题,而是新版本 hpm_signer 对输入 PEM 文件的解析逻辑发生了变更或变得更加严格。


:hammer_and_wrench: 深层原因定位

结合知识库信息和实际行为变化,得出以下结论:

1. hpm_signer 工具已在 Bingo 0.6.169 中更新

  • 虽然 Bingo 是构建工具框架,但其内置或依赖的 hpm_signer 实际执行签名任务。
  • 多个文档(如[搜索结果5、10])明确指出:

    “签名依赖的工具由 bmcgo 提供,openubmc 社区版本的 bingo 还不支持签名。”

  • 但 Bingo 后续通过集成脚本方式(bingo hpm_signer)封装了 hpm_signer 命令(见搜索结果1、6)。
  • 因此,新版 Bingo(0.6.169)可能打包了更新版 hpm_signer 可执行文件或调用方式更严格的 OpenSSL 接口。

2. 新版本对 PEM 文件格式要求更严格

虽然 signer.pemts_signer.pem 文件内容相同,但在 0.6.169 中报错,说明新版本:

  • 拒绝处理非标准 PEM 格式(如缺少换行、头部有空格、使用了非 ASCII 字符等)
  • 可能不再兼容加密 PEM 文件(.pem.enc),而要求明文 PEM
  • 或内部调用的 OpenSSL 3.x 对格式检查更严格(您提到系统为 Ubuntu 24.04)

:magnifying_glass_tilted_right: 特别注意:您目录中有 signer.pem.encts_signer.pem.enc 文件,表明原设计支持加密 PEM。但 hpm_signer 调用未传解密参数(如密码),故很可能本次更新后不再自动支持加密 PEM。


:white_check_mark: 解决方案

:white_check_mark: 方案一:【推荐】检查并修复 PEM 文件格式(确保符合标准)

步骤 1:确认 signer.pem 内容是否为合法 PEM

cat /etc/signer/signer.pem

输出应类似:

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

步骤 2:验证 PEM 文件完整性

openssl rsa -in /etc/signer/signer.pem -check -noout
# 或如果是 PKCS#8 格式:
openssl pkey -in /etc/signer/signer.pem -check -noout

如果提示错误,则文件无效。

步骤 3:重新导出为标准 PEM 格式

若使用的是加密 .pem.enc,先解密:

# 示例:假设有密码,执行解密
openssl rsa -in signer.pem.enc -out signer.pem

或使用私钥生成标准 PEM:

# 若原始密钥为 DER,转换为 PEM
openssl rsa -inform DER -in signer.key.der -outform PEM -out signer.pem

确保所有行之间无多余空格、无 BOM 头、仅 LF 换行符。


:white_check_mark: 方案二:降级或替换 hpm_signer 工具(临时应急)

您已验证此方法有效:

# 备份当前(有问题)的 hpm_signer
mv /usr/local/bin/hpm_signer /usr/local/bin/hpm_signer.bak

# 替换为 0.6.159 环境下的正常版本
scp user@old-env:/usr/local/bin/hpm_signer /usr/local/bin/
chmod +x /usr/local/bin/hpm_signer

:warning: 注意:此为临时方案。长期使用需等待官方修复或明确变更说明。


:white_check_mark: 方案三:使用完整签名链并启用调试日志(排查输入/调用链)

参考搜索结果3、8中远程签名流程,建议加上完整参数调试:

hpm_signer \
  -s /etc/signer/signer.pem \
  -t /etc/signer/ts_signer.pem \
  -T /etc/signer/tsa.cnf \
  -i rootfs_user.tar.gz \
  -o image.cms \
  -v  # 启用详细日志(如果支持)

也可尝试增加 -noenc 参数(部分版本可用):

hpm_signer ... -noenc

查看是否提示更具体的解析错误。


:white_check_mark: 方案四:反馈至社区或团队,确认 hpm_signer 更新日志

鉴于此为官方工具链更新导致的问题,建议:

  1. OpenUBMC 论坛 提交 Issue
  2. 引用:“Bingo 0.6.169 版本中 hpm_signer 不再兼容原有 signer.pem,提示 ‘no start line’”
  3. 附上测试对比(0.6.159 成功 vs 0.6.169 失败)
  4. 请求提供:
    • hpm_signer 工具变更说明
    • 是否需配合新格式证书?
    • 是否移除了对加密 PEM 的支持?

:pushpin: 建议的最佳实践

项目 建议
证书管理 明确区分使用明文 PEM 还是加密 PEM;生产环境建议加密,测试环境可用明文
工具版本锁定 manifest.yml 或 CI 流程中固定 Bingo 版本,避免意外升级
签名调试 使用 hpm_verify 验证生成的 .cms 文件是否合法
日志留存 保存 task.log 文件以便追踪签名失败上下文

:white_check_mark: 总结

项目 内容
问题本质 Bingo 0.6.169 版本中集成的 hpm_signer 对 PEM 证书格式校验更严格,导致原有证书无法加载
直接原因 error:0480006C:PEM routines::no start line 表示 PEM 文件头无效,极可能是格式不合规或加密 PEM 不受支持
根本原因 hpm_signer 工具被更新,行为发生不兼容变更
验证成功方案 使用旧版本 hpm_signer 可正常签名 → 确认为工具问题
推荐解决路径 1. 修复 PEM 文件格式
2. 或降级 hpm_signer
3. 同步反馈社区推动文档/兼容性更新

:paperclip: 相关参考资料(来自知识库)

  • hpm包格式说明以及重新签名指导
  • bingo hpm_signer 命令已集成重签名流程(见文档块 #1
  • 注意区分 bingo hpm_signer 与底层 hpm_signer 命令(前者依赖后者)
  • 旧版 Bingo 社区分支不支持签名,签名能力由 bmcgo 提供 → 当前 hpm_signer 应来自该工具链

:warning: 强烈建议统一 Bingobmcgo 版本配套使用,避免因组件混用导致签名异常。

如有需要,可提供 signer.pem 的头部几行(去除敏感内容)用于进一步分析。