openUBMC 远程签名接入实践(SignServer + hpm_signer)
这篇帖子记录我在 openUBMC 构建链路里接入远程签名(Keyfactor/SignServer)的完整使用方法。目标不是讲“签名服务器怎么搭”,而是讲构建侧怎么正确、稳定、可维护地用起来。
签名服务器的部署与基础配置我单独写了另一篇,这里就不重复:
《签名中心服务器搭建与配置》(链接见: PKI 实践指南:构建完整的签名中心服务系统 x openUBMC hpm包签名实践 )
前置条件
构建环境需要有:
-
hpm_signer -
hpm_verify -
openssl -
能访问签名服务的网络
正常通过manifest 一键式构建即可,剩下只需要搭建好的签名服务,以及服务里面启动的cms worker和时间戳worker
域名与 TLS 准备
很多内网 SignServer 的证书会要求必须用域名校验(CN/SAN)。 如果你没有内网 DNS,可以先用 hosts 解决。
1) hosts 映射
sudo vi /etc/hosts
添加:
<SIGN_SERVER_IP> <SIGN_SERVER_DOMAIN>
验证:
getent hosts <SIGN_SERVER_DOMAIN>
配图:
2) 获取 HTTPS 校验用 CA(可选但推荐)
如果平台能提供官方 CA,请优先使用平台下发版本。 没有的话可以临时抓取证书链作为 --curl-cafile 的来源:
sudo mkdir -p /root/ca
sudo openssl s_client -showcerts \
-connect <SIGN_SERVER_IP>:<PORT> \
-servername <SIGN_SERVER_DOMAIN> \
</dev/null 2>/dev/null \
| sed -ne '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' \
> /root/ca/ca.pem
#openssl s_client -showcerts -connect 192.168.13.118:443 -servername 192.168.13.118 </dev/null 2>/dev/null | sed -ne '/BEGIN CERTIFICATE/,/END CE
RTIFICATE/p' > /root/ca/ca.pem
验证:
curl --cacert /root/ca/ca.pem -I https://<SIGN_SERVER_DOMAIN>/
配图:
manifest 配置(核心)
在 manifest.yml 中加入:
base:
signature:
signserver:
# CMS 签名服务地址(对应 hpm_signer -S)
url: "https://<SIGN_SERVER_DOMAIN>/<SIGNSERVER_API_PATH>"
# TSA 时间戳服务地址(对应 hpm_signer -U)
tsa_url: "https://<SIGN_SERVER_DOMAIN>/<TSA_API_PATH>"
# SignServer CMS workerId
cms_worker_id: <CMS_WORKER_ID>
# 客户端摘要算法
hash: "SHA-256"
# 构建侧验签与产物输出所需材料
rootca_der: "/root/ca/rootca.der"
rootca_crl: "/root/ca/rootca.crl"
# TLS 校验策略 signserver的ca证书
insecure: false
curl_cafile: "/root/ca/ca.pem"
# Keyfactor 客户端模式(必选)
keyfactory: true
配图:
参数速查(对照 hpm_signer)
-
url→-S -
tsa_url→-U -
cms_worker_id→--cms-worker-id -
hash→--cms-client-hash -
keyfactory→--keyfactory -
rootca_der/rootca_crl→ 构建侧本地验签 + 输出给上层流程 -
insecure/curl_cafile→ HTTPS 校验策略
TLS 优先级说明
当同时配置:
insecure: true
curl_cafile: "/root/ca/ca.pem"
行为是:
-
优先
--insecure -
curl_cafile只在insecure=false时生效
这避免了“看起来配了安全校验但实际上被 insecure 覆盖”的误解。
构建阶段发生了什么
当构建进入签名阶段:
-
读取
base.signature.signserver -
将
rootca.der/rootca.crl转 PEM(仅用于本地验签) -
调用
hpm_signer生成*.cms -
调用
hpm_verify做构建侧验签 -
输出
rootca.der/rootca.crl到上层需要的位置
常见问题
1) 报错:未找到 signserver 配置
检查路径:
base:
signature:
signserver:
2) 报错:rootca.der/rootca.crl 不存在
这两个文件是构建侧必需:
-
用于本地验签
-
用于产物出参
请确保路径正确,格式符合要求。
3) HTTPS 校验失败
优先排查:
-
访问是否使用了
<SIGN_SERVER_DOMAIN> -
hosts/DNS 是否正确解析
-
curl_cafile是否可用
快速验证:
curl --cacert /root/ca/ca.pem -I https://<SIGN_SERVER_DOMAIN>/


