GitHub 以及其他 GIT 平台中启用 GPG2 认证基本使用流程(MacOS),增强身份识别和安全性

GitHub 以及其他 GIT 平台中启用 GPG2 认证基本使用流程(MacOS),增强身份识别和安全性

base gnupg(version >= 2.1.17,版本 gnupg 已包含 gpg-agent)

注意事项:gpg2 默认交互式输入密码,有相应的解决方案。

brew install(推荐):
1
brew install gnupg
版本信息(截至 2022.06.19)
1
2
3
4
5
6
7
gnupg: stable 2.3.6 (bottled)
GNU Pretty Good Privacy (PGP) package
https://gnupg.org/
/usr/local/Cellar/gnupg/2.3.6 (149 files, 13.3MB) *
Poured from bottle on 2022-05-04 at 00:14:15
From: https://mirrors.ustc.edu.cn/homebrew-core.git/Formula/gnupg.rb
License: GPL-3.0-or-later

生成以及查看密钥

  • 生成密钥(交互选择建议默认)

    1
    gpg --full-generate-key
    • 在提示时,指定要生成的密钥类型,或按 Enter 键接受默认值。
    • 在提示时,指定想要的密钥大小,或按 Enter 键接受默认值。 密钥必须至少是 4096 位。
    • 输入密钥的有效时长。 按 Enter 键将指定默认选择,表示该密钥不会过期。
    • 验证您的选择是否正确。
    • 输入您的用户 ID 信息。
  • 查看已签发密钥

    1
    gpg --list-secret-keys --keyid-format=long
  • 查看指定公钥的信息(Prints the GPG key ID, in ASCII armor format)

    1
    gpg --armor --export <GPG key ID>

    复制公钥信息到 GitHub 上:
    -----BEGIN PGP PUBLIC KEY BLOCK----- 开始,到 -----END PGP PUBLIC KEY BLOCK-----

  • 设置邮箱(建议全局默认一个常用 Email):

    1
    git config --global user.email ""
  • 设置项目开启 GPG 验证签名(不建议全局开启,可局部开启,防止影响其他平台或项目的提交引发连锁反应)

    1
    git config commit.gpgsign true

GPG 密钥导出以及备份

创建导出备份密钥文件的路径(例如):

1
2
# 注意:密钥备份完毕后建议清理此目录及文件夹!
mkdir -p ~/GPGBAK

警告:导出的备份密钥为敏感文件,为了安全请确保密钥异地保存妥当后,清理导出当前的备份文件

备份 GPG 公钥

1
gpg -o ~/GPGBAK/gpg_keys_github_macos --export <GPG Key ID>

备份 GPG 私钥

1
gpg -o ~/GPGBAK/gpg_secret_keys_github_macos --export-secret-keys <GPG Key ID>

常见问题

  • 在终端可能出现 git 提交 commit 时提交失败需要输入 GPG 密码解密密钥? 可设置终端信息,然后重新开启一个终端生效。

    错误信息:

1
2
error: gpg 数据签名失败
fatal: 写提交对象失败

解决方案:

1
vim ~/.zshrc
1
2
# GPG CONFIG (交互式窗口不弹出解决方案)
export GPG_TTY=$(tty)

GPG2 密码缓存时间设置:
默认文件不存在则创建

1
2
3
4
5
6
7
8
9
  touch ~/.gnupg/gpg-agent.conf
```

**推荐**配置 gpg-agent 选项(密码缓存有效时间(不建议 ttl 设置过长!)
* GnuPG agent 是一个帮助工具,当你运行 gpg 用于缓存私钥时会自动运行。
* default-cache-ttl(seconds):如果在失效期前,使用了相同名称的私钥,那么计数器会被重置,默认是 600s(10min)
* max-cache-ttl (seconds):不论你最近是否使用过私钥,只要超过了此值,就需要进行重新验证,默认是 30min。
* **可设置长时间,但不建议太长**,还有一种是定期刷新有效时间,但需要配置系统任务容易遗忘所以不推荐。

default-cache-ttl 1800
max-cache-ttl 7200

1
2

重启 gpg-agent 进程:

echo RELOADAGENT | gpg-connect-agent


* 提交推送完成后 GitHub 仍然提示未验证?  
  解决方案:  
  检查本地提交的 GIT 默认邮箱和 GitHub 平台的登记邮箱是否一致,不一致可修改当前项目的邮箱保持和 GPG 一致即可。

* 其他平台如何设置?  
  解决方案:  
  其他 GIT 在线平台和 GitHub 操作方法基本一致。

#### 请妥善保存和使用 GPG 签名密钥,防止敏感文件泄漏!

GitHub 以及其他 GIT 平台中启用 GPG2 认证基本使用流程(MacOS),增强身份识别和安全性

https://www.wdft.com/eadfec01.html

Author

Jaco Liu

Posted on

2022-06-19

Updated on

2025-12-24

Licensed under