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.defense.ink/eadfec01.html

Author

Jack Liu

Posted on

2022-06-19

Updated on

2024-02-17

Licensed under