在 macOS 中使用 GPG 签名提交至 Github

在 Github 显示的 commit 中发现有一个绿色的 “Verified” 小标记,于是尝试实现。

使用 GPG 在本地签名 commit,GitHub 可以验证这些签名,以便其他人知道提交来自可信的来源。

安装 GPG

macOS 下,使用 homebrew 进行安装

1
$ brew install gpg

生成 GPG 密钥对

  • 如果使用的是 2.1.17 或更高版本,使用以下命令生成 GPG 密钥对
    1
    $ gpg --full-generate-key
  • 如果使用的不是 2.1.17 或更高版本,可使用以下命令生成 GPG 密钥对
    1
    $ gpg --default-new-key-algo rsa4096 --gen-key

加密方式默认选择: RSA and DSA

输入所需的密钥长度: 4096

有效时长:按需指定

输入用户姓名

输入邮箱,这一步需要输入 GitHub 帐户中经过验证的电子邮件地址

输入自定义的安全密码(界面可能会是乱码,不影响密码的输入)

查看并导出生成的密钥对

使用命令

1
$ gpg --list-secret-keys --keyid-format LONG

从 GPG 密钥列表中复制想要使用的 GPG 密钥 ID。 在此例中,GPG 密钥 ID 是 3AA5C34371567BD2

1
2
3
4
5
6
$ gpg --list-secret-keys --keyid-format LONG
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid Hubot
ssb 4096R/42B317FD4BA89E7A 2016-03-10

导出要使用的密钥对,以此密钥为例

1
gpg --armor --export 3AA5C34371567BD2

复制 GPG 密钥

-----BEGIN PGP PUBLIC KEY BLOCK----- 开始
-----END PGP PUBLIC KEY BLOCK----- 结束

添加密钥至 Github

在 Github 的设置中找到 SSH and GPG keys 选项,或点击链接:https://github.com/settings/keys

单击 New GPG key(新 GPG 密钥),然后粘贴上一步中复制的密钥

使用密钥

在 Git 中设置 GPG 签名密钥,记得替换为自己的 GPG 密钥 ID

1
git config --global user.signingkey 3AA5C34371567BD2

为当前的单个项目配置密钥认证

1
$ git config commit.gpgsign true

为全部项目配置密钥认证

1
$ git config --global commit.gpgsign true

错误解决

使用 VS Code 提交代码时报错

error: gpg failed to sign the data
fatal: failed to write commit object

同样,使用 IntelliJ IDEA 提交代码时报错:

gpg failed to sign the data failed to write commit object

需安装 pinentry-mac

1
$ brew install pinentry-mac

获取 pinentry-mac 的路径

1
$ which pinentry-mac

返回如:/opt/homebrew/bin/pinentry-mac

新建 ~/.gnupg/gpg-agent.conf,加入

~/.gnupg/gpg-agent.conf
1
pinentry-program /opt/homebrew/bin/pinentry-mac

重载 gpg-agent 生效

1
$ gpg-connect-agent reloadagent

此时可以正常提交了,commit 时会弹出提示框,按照提示输入 Password 即可

参考链接

在 macOS 中使用 GPG 签名提交至 Github

https://morooi.com/2020/github-gpg/

作者

SJ Zhou

发布于

2020-03-13

更新于

2023-12-02

许可协议

评论