问题描述
我的镜像工程前几天编译正常,今天编译突然就报签名异常的问题,这是什么原因?
环境信息
-
操作系统:[如 Ubuntu 24.04]
-
软件版本:[如 OpenUBMC2507]
-
硬件配置:[如 CPU、内存等]
重现步骤
这个是前几天编译正常的工程,没有做任何改动就开始报签名有问题,无法编译,重新生成了签名文件放到ca文件夹下编译也正常,但是由于更换签名需要过度包,之前交付的产品也需要维护过度包,后续版本会乱
期望结果
希望能正常使用原签名文件
答案内容由AI生成,仅供参考:
根据您描述的问题(编译突然报签名异常,原签名文件无法继续使用,而新生成的签名文件可以正常编译),结合上下文中的技术案例,可能的原因及建议如下:
签名文件后缀或配置格式变化
上下文topic/1056(参考ID 10)中记录了完全一致的现象:
“签名文件有后缀有变动,同时修改
manifest.yml的签名文件后缀后,执行通过。”
当前构建环境可能要求签名文件采用特定的后缀(如.der、.pem.enc等),而您的旧签名文件后缀不再匹配。
签名配置结构(manifest.yml)更新
上下文私有签名,在yml中自动化后报错(参考ID 2)指出签名配置需要从旧的signature: files格式迁移到新的signature: certificates格式。
“不能从 yaml 文件中获取到键值 base/signature/simple_signer_server”
如果您的manifest.yml仍使用旧格式,构建系统可能无法正确解析,导致签名异常。
构建工具版本或签名机制变更
topic/2908中提到“使用的还是bingo,出签名包使用bmcgo”,说明不同工具对签名的处理方式不同。topic/4146(参考ID 7)指出bingo签名需要修改hpm_header.config等配置文件,否则会报gpp_header hpm错误。根证书文件新增导致签名验证失败
openUBMC_ming在topic/204(参考ID 8)中报告26.06版本多了rsa_rootca.crt和sm2_rootca.crt,按照旧方式签名会导致编译报错。您当前版本25.07可能也引入了类似变化,旧签名证书未被新构建流程认可。
签名验证开关被意外启用
上下文work.build.conan任务失败的日志(参考ID 3)显示:
“firmware_mgmt组件开启了签名验证,但本地无法签名”
如果构建配置突然开启了强制签名验证,而旧签名文件对应的证书链未正确预置到rootfs中,则编译会直接失败。
manifest.yml配置的一致性manifest.yml,定位signature部分,检查其格式是files还是certificates。topic/1056的解决经验,对比ca/目录下实际签名文件的后缀名与manifest.yml中配置的后缀名,确保完全一致(例如.pem、.pem.enc、.der、.crl等)。certificates格式,还需确认键名是否正确(如rootca_der、signer_pem、timestamp_signer_pem)。hpm_signer或bmcgo的验证命令(如hpm_signer -s ... -t ...)验证旧签名文件是否能被当前工具正确解析。topic/4743(参考ID 4)中的验证命令:SIGN_PASSWORD=<加密密码> hpm_signer -s signer.pem.enc -t ts_signer.pem.enc -T tsa.cnf -i rootfs_BMC.img -o rootfs_BMC.img.cms
参考私有签名,在yml中自动化后报错(参考ID 2)中的正确配置示例(注意缩进和键值):
signature:
certificates:
rootca_der: ${product}/ca/rootca.der
signer_pem: ${product}/ca/signer.pem
timestamp_signer_pem: ${product}/ca/ts_signer.pem # 根据实际文件后缀调整
rootca_crl: ${product}/ca/rootca.crl
同时确保gpp.files中也包含了对应的证书文件。
rootca.der或rootca.crl已正确放入manifest/build/product/BMC/openUBMC/rootfs/目录(或根据您当前的产品目录调整),否则签名验证阶段的证书查找会失败。topic/4743回复:
“需要将rootca.der文件提前预置到opt/bmc/trust/partner目录,具体实现是将rootca.der文件复制到manifest源码的build/product/BMC/openUBMC/rootfs/目录。”
bingo,可尝试改用bmcgo执行签名出包(但需先安装对应工具,参考topic/2908的建议)。bingo,参考topic/4146的做法,修改/usr/local/bin/下各config文件中的文件名(如将rootfs_iBMC.img改为rootfs_BMC.img),使其与manifest.yml一致。您提到重新生成签名文件后可编译,但需要伴随过渡包,导致版本混乱。从上下文看,这是正常的安全流程:
hpm签名包升级失败(参考ID 1)明确指出:需要先刷入过渡包(包含自签名的根证书),再刷入签名包。rootca.der已被烧录进设备的opt/bmc/trust/partner目录,且验证链无误。manifest.yml中签名文件的后缀名(参考topic/1056的经验)。signature部分使用的是当前构建版本所需的certificates格式,而非旧版files格式(参考ID 2)。由于您未提供具体的错误日志,以上分析基于社区中类似问题的典型模式。如果问题仍无法解决,建议查看编译过程中的详细日志(如task.log),并尝试在论坛中搜索同类错误信息。
我重新生成的签名文件名称和存放路径均和就版本的一致,manifest.yml中的内容也没有变化,可以正常编译
手动调用标红的命令,此是底层机制,如果hpm_verify失败,表示无法通过验签,可以检查crl吊销链表、证书有效期等信息。
工具源码位置:bingo/tools/src/signer/cms_ver.c-代码预览-bingo:基于命令行的 BMC 开发工程工具项目 - AtomGit
执行时可以在hpm_verify指定-v参数打印过程日志。
如有疑问,可以编译hpm_verify调试功能。
检查了签名时间,也没有过期

请反馈hpm_verify打印日志。
检查序列号也正常,没有被吊销

unsigned int flags = CMS_DETACHED | CMS_NOSMIMECAP | CMS_BINARY;
log_debug("Open CA certificate: %s", ca_cert);
tbio = BIO_new_file(ca_cert, "r");
if (tbio == NULL) {
log_error("Open CA certificate failed: %s", ca_cert);
break;
}
关键日志:Open CA certificate failed: xxx
请检查rootca.pem文件存在性、内容正确性等。
参考AI答复:
BIO_new_file失败,print_ssl_error返回error:80000002:systemlibrary::No such file or directory
这个错误(error:80000002:system library::No such file or directory ,在 OpenSSL 3.0+ 中对应系统的 ENOENT / 文件未找到)表明 OpenSSL 在试图打开指定路径的文件时,底层操作系统返回了“文件或目录不存在” 。
GitHub
BIO_new_file 是 OpenSSL 内部用来读取证书、私钥或配置文件的函数。引发此错误的排查方向如下:
最常见的情况是配置文件中的变量未生效 ,导致实际拼出的路径出现双斜杠(如 /etc/ssl//cert.pem )或只有文件名。
GitHub
BIO_new_file 或相关 SSL 初始化函数的完整字符串参数。如果加载的文件是软链接(例如 Let’s Encrypt / Certbot 证书路径 /etc/letsencrypt/live/...):
ls -l 查看该文件是否指向了一个已经不存在的真实路径(失效链接)。OpenText - Forums
如果代码中写的是相对路径(如 ./cert.pem 或 certs/ca.crt):
/opt/app/certs/cert.pem)。openssl.cnf)丢失有时代码并没有显式加载证书,但初始化 OpenSSL 时,系统默认去找环境变量或系统路径下的 openssl.cnf,如果找不到也会报该错误。
OPENSSL_CONF,且该环境变量指向的文件是否存在。如果程序运行在 Docker 容器或 chroot 环境中:
如果你是在编写代码,可以在调用 BIO_new_file 之前打印当前路径和错误信息:
`C#include <stdio.h>
#include <unistd.h>
#include <openssl/bio.h>
#include <openssl/err.h>
const char *filename = “/path/to/your/certificate.pem”;
// 1. 打印当前工作目录,确认相对路径基准
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
printf(“Current working dir: %s\n”, cwd);
}
// 2. 使用 C 标准库直接测试访问
if (access(filename, F_OK) != 0) {
perror(“System access check failed”); // 会直接打印系统级错误原因
}
// 3. 调用 BIO
BIO *bio = BIO_new_file(filename, “r”);
if (!bio) {
ERR_print_errors_fp(stderr);
}`
军哥好,签名生成时,参考您提供的方法:自签名CA创建以及HPM签名指导 - CICD SIG - openUBMC 论坛,里面显示rootca.pem在生成过程中已经自动删除了,一直没有这个文件,新生成的编译正常的签名也没有这个文件
签名进程明确返回非零值表示执行错误,请使用产品构建匹配的证书/文件验证,另外执行完成hpm_verify后可以调用 echo $?获取命令返回状态码。
应该是执行目录不正确,应该到temp下执行相关命令,可能原因是manifest.yml copy文件出错,对比下temp/xxx/hpm_build_dir下的证书文件和ca目录下的差异
temp/log/task.log里面执行到这一段命令报的是什么错误?
Using configuration from /home/workspace/manifest/build/product/ca/tsa.cnf
Warning: could not open file ./serial for reading, using serial number: 1
Response has been generated.
e[32mSign /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img starte[m
e[32mSign /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img successfully(need timestamp sign more)e[m
e[32mParse cms data starte[m
e[32mFound rsaEncryption datae[m
e[32mGenerate tsa request filee[m
e[32mSigned tsa request filee[m
e[32mParse timestamp signed datae[m
e[32mMerge timestamp signed datae[m
e[32mWrite cms data to /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms starte[m
e[32mWrite cms data to /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms successfullye[m
e[32mFinishede[m
[2026-07-27 19:06:10,713 INFO] >> hpm_verify -r rootca.pem -C cms.crl.pem -c /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img -s /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms
e[31mVerification Failuree[m
e[31merror:17000064:CMS routines::certificate verify errore[m
e[31m[2026-07-27 19:06:10,722 ERROR] 执行命令 /usr/local/bin/hpm_verify -r rootca.pem -C cms.crl.pem -c /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img -s /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms 错误, 日志: /home/workspace/manifest/temp/log/task.loge[0m
前面应该还有2句命令
openssl x509
openssl crl 相关的 ,麻烦提供
[2026-07-27 19:06:09,883 INFO] 切换工作目录到: /home/workspace/manifest/temp/build_openUBMC_debug_dev
[2026-07-27 19:06:09,884 INFO] >> cp /home/workspace/manifest/temp/board_openUBMC/update_ext4.cfg /home/workspace/manifest/temp/build_openUBMC_debug_dev/hpm_build_dir/update.cfg
[2026-07-27 19:06:09,887 INFO] 切换工作目录到: /tmp/tmpl02ftawc
[2026-07-27 19:06:09,889 INFO] >> openssl x509 -in /home/workspace/manifest/build/product/ca/rootca.der -inform der -outform pem -out rootca.pem
[2026-07-27 19:06:09,890 INFO] 切换工作目录到: /home/workspace/manifest/temp/build_openUBMC_debug_dev/hpm_build_dir
[2026-07-27 19:06:09,893 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/product_mgmt/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,893 INFO] 执行脚本 product_mgmt/include/customization.py 开始
[2026-07-27 19:06:09,894 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/secbox/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,895 INFO] 执行脚本 secbox/include/customization.py 开始
[2026-07-27 19:06:09,895 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/iam/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,895 INFO] 执行脚本 iam/include/customization.py 开始
[2026-07-27 19:06:09,896 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/mdbctl/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,896 INFO] 执行脚本 mdbctl/include/customization.py 开始
[2026-07-27 19:06:09,897 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/rootfs_user/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,897 INFO] 执行脚本 rootfs_user/include/customization.py 开始
[2026-07-27 19:06:09,897 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/bmc_network/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,898 INFO] 执行脚本 bmc_network/include/customization.py 开始
[2026-07-27 19:06:09,899 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/nsm/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,899 INFO] 执行脚本 nsm/include/customization.py 开始
[2026-07-27 19:06:09,900 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/hica/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,900 INFO] 执行脚本 hica/include/customization.py 开始
[2026-07-27 19:06:09,901 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/file_transfer/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,901 INFO] 执行脚本 file_transfer/include/customization.py 开始
[2026-07-27 19:06:09,901 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/bmc_health/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,902 INFO] 执行脚本 bmc_health/include/customization.py 开始
[2026-07-27 19:06:09,902 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/oms/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,902 INFO] 执行脚本 oms/include/customization.py 开始
[2026-07-27 19:06:09,903 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/ddns/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,903 INFO] 执行脚本 ddns/include/customization.py 开始
[2026-07-27 19:06:09,904 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/ssdp/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,904 INFO] 执行脚本 ssdp/include/customization.py 开始
[2026-07-27 19:06:09,904 INFO] >>>>>>>>>> 开始执行 /home/workspace/manifest/temp/build_openUBMC_debug_dev/conan_install/bmc_time/include/customization.py post_hpm 定制化
[2026-07-27 19:06:09,905 INFO] 执行脚本 bmc_time/include/customization.py 开始
[2026-07-27 19:06:09,924 INFO] bmc 版本: 25.07.01.01
[2026-07-27 19:06:09,925 INFO] >> sed -i “/^Version=/s/1.0/25.07.01.01/g” update.cfg
[2026-07-27 19:06:09,925 INFO] >> openssl crl -in /home/workspace/manifest/build/product/ca/rootca.crl -inform der -outform pem -out cms.crl.pem
[2026-07-27 19:06:09,930 INFO] >> chmod +x . -R
[2026-07-27 19:06:09,937 INFO] >> hpm_signer -s /home/workspace/manifest/build/product/ca/signer.pem -t /home/workspace/manifest/build/product/ca/ts_signer.pem -T /home/workspace/manifest/build/product/ca/tsa.cnf -i /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img -o /home/workspace/manifest/temp/build_openUBMC_debug_dev/output/rootfs_iBMC.img.cms
[2026-07-27 19:06:09,943 INFO] 切换工作目录到: /home/workspace/manifest/temp/build_openUBMC_debug_dev/output
[2026-07-27 19:06:09,944 INFO] >> tar --format=gnu --exclude iBMC_rootfs.tar.gz -czf rootfs_iBMC.tar.gz rootfs_iBMC.img
Using configuration from /usr/lib/ssl/openssl.cnf
Using configuration from /home/workspace/manifest/build/product/ca/tsa.cnf
Warning: could not open file ./serial for reading, using serial number: 1
Response has been generated.
不好意思,没提供全