各位大佬好,最近在对 bingo 工具链里的签名流程做改造:目标是保持本地 CMS 签名不变,仅把时间戳(TSA)改为走 开源社区版本的keyfactor/SignServer 签名服务(REST),后续也可能把 CMS 本体签名一起远程化。对 bingo 不太熟,代码入口和调用链还没完全梳清,想请教下改动建议
环境
- Ubuntu 24.04 / OpenSSL 3.x
- 已安装
libssl-dev、libcurl4-openssl-dev - 本地工具:
tools/src/signer/目录下的hpm_signer(生成 CMS 并加时间戳)、hpm_verify(校验 CMS)cms_sign.c / cms_ver.c / public.h
- 目标产物:
uboot.bin.cms(对uboot.bin的 CMS 签名,含时间戳)
现状 & 我已做的改造
- 仅将 TSA 改为 SignServer
在cms_sign.c里新增参数并接入 libcurl:
- 新参数:
--tsa-url/-U指向 SignServer TSA Worker,例如
https://<host>/signserver/process?workerId=3 - 流程:仍旧先按签名值生成 TSQ → POST 到 SignServer → 拿到 TSR → 注入 CMS
unsignedAttrs。 - 没有改动“CMS 本体签名”的位置与方式(仍用本地
signer.pem)。
- 编译
gcc cms_sign.c -o hpm_signer $(pkg-config --cflags --libs libssl libcrypto libcurl) -ldl -pthread
gcc cms_ver.c -o hpm_verify $(pkg-config --cflags --libs libssl libcrypto) -ldl -pthread
- 使用示例(时间戳走 SignServer)
hpm_signer \
-s /path/signer.pem \
-i /path/uboot.bin \
-o /path/uboot.bin.cms \
-U "https://<host>/signserver/process?workerId=3"
我现在的疑问
- bingo 调用签名的入口在哪?
- 希望确认“uboot.bin → hpm_signer → *.cms → 后续打包”的完整调用链,避免只改了 signer 而漏掉其他环节(比如校验、打包、镜像命名等)。
- 仅改 TSA→SignServer 时还要动哪些点?
