You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GPG签名RPM包后验证提示Signature BAD的原因排查

RPM包GPG签名验证失败问题排查(RPM 4.18.0)

已执行操作

  • 生成密钥:
    gpg --no-default-keyring --full-gen-key
    
  • 创建~/.rpmmacros文件,内容如下:
    %_topdir %(echo $HOME)/rpmbuild
    
    %__arch_install_post \
        [ "%{buildarch}" = "noarch" ] || QA_CHECK_RPATHS=1 ; \
        case "${QA_CHECK_RPATHS:-}" in [1yY]*) /usr/lib/rpm/check-rpaths ;; esac \
        /usr/lib/rpm/check-buildroot
    %_signature gpg
    %_gpg_path /root/.gnupg
    %_gpg_name testuser
    %_gpgbin /usr/bin/gpg2
    %__gpg_sign_cmd %{__gpg} gpg --force-v3-sigs --batch --verbose --no-armor --passphrase-fd 0 --no-secmem-warning -u "%{_gpg_name}" -sbo %{__signature_filename} --digest-algo sha256 %{__plaintext_filename}'
    
  • 导出公钥:
    gpg --export -a testuser > ~/public.asc
    
  • 导入公钥到RPM:
    rpm --import /root/public.asc
    
  • 签名RPM包:
    rpm --addsign packetbeat-8.5.3-x86_64.rpm
    
    输出信息:
    packetbeat-8.5.3-x86_64.rpm:
    gpg: WARNING: unsafe permissions on homedir '/root/.gnupg'
    gpg: writing to 'packetbeat-8.5.3-x86_64.rpm.sig'
    gpg: pinentry launched (1861 curses 1.2.1 /dev/pts/0 xterm - 20620/1000/5 0/0 0)
    gpg: RSA/SHA256 signature from: "3AEA484FD5C227E4 Testuser (mycomment) <testuser@testuser.de>"
    
  • 验证签名:
    [root@fedora opt]# rpm -Kv packetbeat-8.5.3-x86_64.rpm
    
    输出结果:
    packetbeat-8.5.3-x86_64.rpm:
        Header V4 RSA/SHA256 Signature, key ID d5c227e4: BAD
        Header SHA256 digest: OK
        Header SHA1 digest: OK
        Payload SHA256 digest: OK
        MD5 digest: OK
    

问题原因及解决方法

1. .rpmmacros签名命令配置错误

你的%__gpg_sign_cmd行存在重复调用问题:%{__gpg} gpg,其中%__gpg已经指向%_gpgbin(即/usr/bin/gpg2),重复的gpg会导致签名格式不符合RPM校验标准,直接引发签名验证失败。

修改%__gpg_sign_cmd行,删除多余的gpg和末尾错误的单引号:

%__gpg_sign_cmd %{__gpg} --force-v3-sigs --batch --verbose --no-armor --passphrase-fd 0 --no-secmem-warning -u "%{_gpg_name}" -sbo %{__signature_filename} --digest-algo sha256 %{__plaintext_filename}

2. .gnupg目录权限不符合安全要求

签名时出现的WARNING: unsafe permissions on homedir '/root/.gnupg'提示,说明密钥目录权限过松。GPG要求密钥目录必须严格限制访问权限(通常为700),否则会触发安全校验逻辑,间接影响签名有效性。

执行以下命令修复权限:

chmod 700 /root/.gnupg
chmod 600 /root/.gnupg/*

3. 重新签名并验证

完成上述修改后,重新对包执行签名操作:

rpm --resign packetbeat-8.5.3-x86_64.rpm

之后再次验证签名:

rpm -Kv packetbeat-8.5.3-x86_64.rpm

内容的提问来源于stack exchange,提问作者froobel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:25:29