IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用GPG对Git Commit进行签名

    Timothy发表于 2022-09-13 11:21:13
    love 0

    使用GPG可以对我们的每一个Git Commit进行签名,通过签名,会在commit的记录上显示一个 Verified 的标记,它表示这次提交确实是出自你自己,而不是冒用你帐号的人。目前GitHub和GitLab均已经支持此功能。

    https://xiaozhou.net/pics/gpg/1.png

    通过GPG签名的Git Commit更加可信,就算你的SSH private key泄漏,别人也没办法仿冒你的身份对Git Commit进行签名,或者更改你已经签名的Git Commit。

    安装GPG

    Mac OS下安装GPG,可以直接用 homebrew:

    1
    brew install gpg

    生成GPG密钥

    跟SSH的Key一样,GPG也是采用非对称加密方式。生成一对GPG密钥,我们需要使用命令:

    1
    gpg --full-generate-key

    生成类似SSH Key,需要你输入用户名,邮箱,或者是密钥的保护密码。生成完成后,我们可以通过如下命令,查看系统中已经生成的GPG Key:

    1
    gpg -K

    系统中的每对GPG key,均有一串类似十六进制的Key ID。由于我的系统中已经有两对GPG Key,所以看起来是这样的:

    https://xiaozhou.net/pics/gpg/2.png

    提交公钥到GitHub

    GitHub的帐号设置中,有专门添加SSH Key和GPG Key的地方,GitLab也类似。首先,我们应当使用命令把GPG Key的公钥导出和显示出来:

    1
    gpg --armor --export <Key ID>

    https://xiaozhou.net/pics/gpg/4.png

    接着,我们需要把 BEGIN 和 END 之间的内容复制,添加到GitHub,成功之后,GitHub就能显示我们的GPG Key了:

    https://xiaozhou.net/pics/gpg/3.png

    本地Git设置

    接下来,我们需要设置本地的Git:

    1
    2
    3
    git config --global user.signingkey <Key ID>
    git config --global commit.gpgsign true
    git config --global gpg.program gpg

    上面命令的目地,是设置在Git Commit签名的时候所用到的Key,并全局开启GPG签名,然后还指定了签名使用用到的程序 pgp。如果你使用SKM,你需要在对应SSH Key的目录中,创建一个HOOK 文件,然后复制上面的命令,这样,在切换SSH Key的时候,也能自动生效设置了。

    最后,就是验证提交和测试了,如果一切进展顺利,你就能在GitHub或者GitLab的提交上,看到右边绿色的 Verified 标记了。

    很幸运的是,Emacs的Git插件magit 也完美支持GPG签名功能,这样在Emacs中提交的时候,也可以直接用GPG签名了,nice!

    https://xiaozhou.net/pics/gpg/5.png



沪ICP备19023445号-2号
友情链接