使用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.rpmpacketbeat-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.rpmpacketbeat-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
相关产品推荐
相关产品推荐

