能否使用X.509证书对RPM包签名并复用现有工作流?
用X.509证书签名RPM包的可行方案
当然可以!虽然RPM生态里最常用的是GPG密钥签名,但它确实支持用X.509证书来完成签名工作,刚好能衔接你现有的X.509工作流。我之前帮团队搭建过类似的流程,下面是具体的操作步骤:
1. 准备合格的X.509证书与私钥
- 确保你的X.509证书包含数字签名扩展(这是签名软件包的核心要求,证书签发时要配置对应的扩展项)。
- 如果你手里是PKCS#12格式的证书包(.p12),可以用
openssl拆分出单独的PEM格式证书和私钥:# 提取公钥证书 openssl pkcs12 -in your-cert.p12 -out cert.pem -clcerts -nokeys # 提取私钥(-nodes参数会去掉密码保护,若需保留密码可移除该参数) openssl pkcs12 -in your-cert.p12 -out key.pem -nocerts -nodes - 记得把私钥的权限设置为
600,避免被其他用户读取:chmod 600 key.pem
2. 配置RPM使用X.509签名规则
编辑RPM的宏配置文件,可以是用户级的~/.rpmmacros或者系统级的/etc/rpm/macros,添加以下内容:
%_signature x509 %_x509_sign_cmd %{__gpg} --no-default-keyring --keyring %{_gpg_path}/x509.pubring --secret-keyring %{_gpg_path}/x509.secring --batch --no-armor --detach-sign --output %{__signature_filename} %{__plaintext_filename} %_x509_verify_cmd %{__gpg} --no-default-keyring --keyring %{_gpg_path}/x509.pubring --verify %{__signature_filename} %{__plaintext_filename}
这里的逻辑是:RPM通过调用gpg工具来处理X.509签名,因为GnuPG本身支持X.509证书的操作。
3. 将X.509证书导入GPG密钥环
RPM依赖GPG的密钥环来管理签名用的证书,所以需要把你的证书导入专用的X.509密钥环:
# 导入公钥证书到X.509公钥环 gpg --no-default-keyring --keyring ~/.gnupg/x509.pubring --import cert.pem # 导入私钥到X.509私钥环 gpg --no-default-keyring --secret-keyring ~/.gnupg/x509.secring --import key.pem
4. 签名RPM包
方式一:单独签名已构建好的RPM
rpmsign --define '_signature x509' --define '_gpg_path ~/.gnupg' -v --addsign your-package.rpm
方式二:构建RPM时直接签名
rpmbuild -ba --define '_signature x509' --define '_gpg_path ~/.gnupg' your-spec-file.spec
5. 验证签名有效性
用RPM自带的验证命令确认签名是否成功:
rpm -K your-package.rpm
如果验证通过,输出会包含x509 sha1 md5 OK的字样;如果是企业级CA签发的证书,建议把根CA证书导入系统信任存储,避免验证时出现“未知CA”的警告。
内容的提问来源于stack exchange,提问作者Mudit Agarwal
相关产品推荐
相关产品推荐

