GPG与在GitHub上使用GPG

GPG与在GitHub上使用GPG

基本过程

  • 生成自己的GPG密钥
  • 关联GPG公钥与Github账户
  • 设置利用GPG私钥对commit进行签名
  • 可选步骤:信任GithubGPG密钥

安装

使用GitHub的话,当然得用Git了。我主要在Windows10系统中使用GitHub,而在openSUSE中,很少使用。而在Windows平台的Git发行版中,自带了GPG。打开Git Bash,在终端输入pgp --version,就可以看到一些版本信息了:

1
2
3
4
5
$ gpg --version

gpg (GnuPG) 2.2.19-unknown
libgcrypt 1.8.5
Copyright (C) 2019 Free Software Foundation, Inc.

但是!!!GPG是有多个版本的,你可以去查询相关的Wiki,不同版本的GPG,可能密钥生成命令是不同的!

生成GPG密钥密钥对

  • 如果使用的是 2.1.17 或更高版本,复制以下命令粘贴到Git终端以生成 GPG 密钥对。(我的是2.2.19版本):

    1
    $ gpg --full-generate-key
  • 如果你的版本没有达到2.1.17或更高版本,那么这个命令可能是无效的。请参考官方文档

  • 在看到提示时,你可以指定要生成的密钥类型,或按 Enter 键接受默认的 RSA and RSA。

GitHub有支持的GPG密钥算法如下:

  • RSA
  • ElGamal
  • DSA数字签名算法
  • ECDH
  • ECDSA
  • EdDSA
  • 然后输入所需的密钥长度。 Your key must be at least 4096 bits.

  • 输入密钥的有效时长。 按 Enter 键将指定默认选择,表示该密钥不会过期。

    这一步的Enter和数字0都表示不会过期。输入其它数字表示天数,字母w表示星期,m表示月份,y表示年份。如3m表示有效期3个月,依此类推,我英语不太好,希望我没说错!

  • 输完之后,会让你确认一遍。

  • 然后会让你输入三项东西

1
2
3
Real name: 这里填个人信息(随便填
Email address: 这里必须填 GitHub 帐户的经过验证的电子邮件地址
Comment: 随便填,如:mygpg
  • 按下回车之后,就会让你设置GPG的安全密码了,先别说密码复不复杂,自己先给记住了哈!

  • 最后会输出一些信息,记得保存,不过,你也可以使用如下命令来查看:

    1
    $ gpg --list-secret-keys --keyid-format LONG
  • 为了方便,这里引用官方的案例,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
  • 粘贴下面的文本(替换为您要使用的 GPG 密钥 ID)。 在此例中,GPG 密钥 ID 是 3AA5C34371567BD2

    1
    2
    $ gpg --armor --export 3AA5C34371567BD2
    # 以 ASCII 封装格式打印 GPG 密钥 ID
  • 复制 GPG 密钥,从 -----BEGIN PGP PUBLIC KEY BLOCK----- 开始,到 -----END PGP PUBLIC KEY BLOCK----- 结束。

  • 最后,将GPG密钥添加到GitHub账户。

    将GPG密钥添加到GitHub账户

    打开GitHub的设置,找到SSH and GPG keys这一项,添加一个新的GPG密钥,并将你刚才复制的密钥粘贴进去。

然后就大功告成啦!

利用GPG私钥对Git commit进行签名

首先,需要让Git知道签名所用的GPG密钥ID:

1
git config --global user.signingkey {key_id}

然后,在每次commit的时候,加上-S参数,表示这次提交需要用GPG密钥进行签名:

1
git commit -S -m "..."

如果你觉得每次都需要手动加上-S有些麻烦,可以设置Git为每次commit自动要求签名:

1
git config --global commit.gpgsign true

但不论是否需要手动加上-S,commit时都会弹出对话框,需要你输入该密钥的密码,以判断是否为本人操作。
至于其它的进阶玩法,自行Google去吧!

-------- 本文结束 感谢阅读 --------
Bess Croft wechat
欢迎订阅本博客!