配置Git GPG提交签名时出现有效密钥签名错误排查
Git提交签名验证失败问题排查
我正在配置Git提交签名时遇到无法排查的错误:
- 已创建好密钥,执行
gpg --list-keys能正常列出:
gpg --list-keys [keyboxd] --------- pub rsa4096 2025-02-03 [SC] 7D8396F74725A208D835CE3730E62A1E4F078650 uid [ultimate] My UID uid [ultimate] Another UID of mine sub ed25519 2025-02-03 [SA] sub cv25519 2025-02-03 [E]
- 已在Git配置中设置签名密钥为
7D8396F74725A208D835CE3730E62A1E4F078650,但验证提交时出现:
gpg: Signature made Mon Feb 3 11:03:42 2025 CET gpg: using EDDSA key 937E44BCBE1C5E3D72342DC7574887BEAA13F10D gpg: BAD signature from "My UID" [ultimate]
异常细节
- 签名使用的是配置密钥下具备SA(签名与认证)能力的子密钥
- 签标签功能正常工作
- 执行
GIT_TRACE=1提交无错误日志 - 直接用GPG签名文本文件并验证也正常
- 环境:MacOS M4 15.2,GPG版本2.4.7(通过brew安装)
排查解决步骤
检查Git的GPG程序路径
Mac上brew安装的GPG路径可能与系统默认版本不一致,Git若调用旧版本会导致兼容问题。执行以下命令查看并设置正确路径:# 查看当前Git使用的GPG路径 git config --global gpg.program # 设置为brew安装的路径(M芯片通常是/opt/homebrew/bin/gpg) git config --global gpg.program /opt/homebrew/bin/gpg确认子密钥私钥完整性
执行gpg --list-secret-keys,检查那个EDDSA子密钥(937E44BCBE1C5E3D72342DC7574887BEAA13F10D)的私钥是否存在。若私钥缺失,会导致签名验证失败。核对Git签名配置层级
确保全局和仓库级配置的签名密钥一致,避免仓库配置覆盖全局:# 查看全局配置 git config --global user.signingkey # 查看当前仓库配置 git config user.signingkey同时确认已开启自动签名:
git config --global commit.gpgsign true重启GPG代理
GPG代理可能缓存旧密钥信息,执行命令重置:gpgconf --kill gpg-agent gpg-agent --daemon手动验证提交数据
提取提交原始内容,用GPG直接验证,定位问题根源:# 导出当前HEAD提交内容 git cat-file -p HEAD > commit_raw.txt # 用GPG验证签名 gpg --verify commit_raw.txt若此验证失败,说明是GPG本身问题;若成功,则问题出在Git调用GPG的逻辑上。
内容的提问来源于stack exchange,提问作者Augusto
相关产品推荐
相关产品推荐

