私有软件源签名发布是安全分发的底线,需基于自有根证书构建闭环校验机制:用openssl或hapsigner生成密钥对,签发自签名根证书并预置到客户端信任库,为每个包生成带时间戳的独立签名文件(.asc/.sig),同步发布包、签名及公钥,并在ci/cd和安装流程中强制自动校验。

构建私有软件源时,签名发布不是可选项,而是安全分发的底线。用户安装前能验证包来源可信、内容未被篡改,依赖的是一套闭环的签名与校验机制——它不靠外部CA背书,而靠你控制的密钥和预置的信任锚点。
生成并管理你的签名密钥对
私有源的核心是自有根证书或签名密钥。推荐使用 OpenSSL 或 OpenHarmony 的 developtools_hapsigner 工具链生成强密码保护的密钥对:
- 用
openssl genrsa -aes256 -out root-ca.key 4096生成带密码保护的 4096 位 RSA 私钥 - 用
openssl req -x509 -new -key root-ca.key -sha256 -days 3650 -out root-ca.crt签发自签名根证书 - 将
root-ca.crt预先部署到所有客户端机器的系统信任库(如 Windows 的certmgr.msc → 受信任的根证书颁发机构) - 后续所有软件包签名证书都由该根 CA 签发,形成可验证的证书链
为每个软件包生成签名文件(.asc 或 .sig)
签名不是直接修改二进制包,而是生成独立的签名附件,便于校验且不影响原始结构:
- 对 tar.gz / deb / rpm / hap 等包文件,用 GPG 或 signtool 生成 detached signature
- GPG 示例:
gpg --detach-sign --armor --default-key "your-key-id" package.deb→ 输出package.deb.asc - Windows 环境可用 signtool:
signtool sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 package.exe(需提前导入证书) - 签名必须绑定时间戳(/tr 参数),避免证书过期后校验失败
在私有源仓库中发布签名与元数据
客户端校验依赖两个关键信息:包本身 + 对应签名 + 可信的公钥/证书。因此仓库需同步提供:
- 软件包文件(如
myapp_1.2.0_amd64.deb) - 对应签名文件(
myapp_1.2.0_amd64.deb.asc或.sig) - 签名所用公钥或证书(如
root-ca.crt或 GPG 公钥环导出文件pubring.gpg) - 索引文件(如 APT 的
Release.gpg、RPM 的repomd.xml.asc)也必须签名,防止元数据被篡改
客户端校验流程要自动化、可集成
不能依赖人工双击验证。应在安装命令中嵌入自动校验逻辑:
- APT 源:配置
apt-transport-https+ 导入root-ca.crt后,apt update自动校验Release.gpg - RPM/YUM:执行
rpm --import root-ca.crt,再用yum install即触发签名检查 - 自定义脚本:下载包后调用
gpg --verify package.deb.asc package.deb,非零退出码即中止安装 - CI/CD 流水线中加入签名步骤(如用 Clawdsign API 提交包哈希,返回签名结果),确保每个构建产物都带有效签名











