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

配置Git GPG提交签名时出现有效密钥签名错误排查

Git提交签名验证失败问题排查

我正在配置Git提交签名时遇到无法排查的错误:

  1. 已创建好密钥,执行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]
  1. 已在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:47:17