前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 GPG 签名 Git 提交,让它安全可信

使用 GPG 签名 Git 提交,让它安全可信

作者头像
donghui
发布2019-11-01 15:03:38
3.6K0
发布2019-11-01 15:03:38
举报

用过 Git 的人应该知道,Git 提交的用户名和邮箱通过 git config 设置的。

一般都会设置成自己的用户名和邮箱,但也可以随意设置。

也就意味着,任何人都可以以你的名义进行提交。

那么如何确保你的提交的可信度,证明它来自真正的你,而不是别人呢?

这里就可以通过使用 GPG 签名你的提交,然后通过 GPG 对它进行验证。

GitHub 支持使用 GPG 签名提交和标签。

GitLab 自 9.5 版本开始,也支持使用 GPG 签名提交了(目前尚不支持 GPG 验证标签)。 Gitee(码云)也支持使用 GPG 签名提交。

下面在 GitLab  12.3.5 及 MacOS 环境下进行实际操作。

GitLab 是如何处理 GPG 呢?

GitLab使用自己的密钥环来验证 GPG 签名。它不访问任何公钥服务器。 对于要由 GitLab 验证的提交:

  • 提交者必须具有 GPG 公钥/私钥对。
  • 提交者的公钥必须已上传到其 GitLab 帐户。
  • GPG 密钥中的一封电子邮件必须与提交者在 GitLab 中使用的经过验证的电子邮件地址匹配。
  • 提交者的电子邮件地址必须与 GPG 密钥中验证的电子邮件地址匹配。

生成 GPG 密钥并上传 GPG key 到 GitLab

1、安装 GPG,MacOS 环境下可以使用 brew 安装 gpg:

brew install gpg

2、用以下命令生成 GPG key。

它是一个交互式命令,会要求你选择使用哪种算法、密钥长度,指定密钥的有效期,输入你的真实姓名以及电子邮件等: 

注意:该电子邮件必须与你 GitLab 中所使用的电子邮件相匹配。

gpg --gem-key

3、使用以下命令列出您刚刚创建的私密 GPG 密钥:

gpg --list-secret-keys --keyid-format LONG <your_email>
# 这里是 admin@example.com

4、复制以 sec 开头的 GPG 密钥 ID。以下示例中,它是  66DD4800155F7A2B

sec   rsa2048/66DD4800155F7A2B 2019-10-31 [SC] [有效至:2021-10-30]
      39033F321A83635ECD7FC8DA66DD4800155F7A2B
uid                 [ 绝对 ] admin <admin@example.com>
ssb   rsa2048/53DD9CB77C862573 2019-10-31 [E] [有效至:2021-10-30]

5、导出该 ID 的公钥:

gpg --armor --export pub 66DD4800155F7A2B

6、复制公钥并将其添加到 GitLab 个人资料的设置中。

Gitlab 页面右上角,单击你的头像,Settings—> GPG keys,然后粘贴 GPG key。

将 GPG 密钥与 Git 关联

git config --global user.signingkey 66DD4800155F7A2B
# 或者
git config user.signingkey 66DD4800155F7A2B

签名提交

1、Git 提交时,使用 -S 标记进行 GPG 签名:

git commit -S -m “commit message"

2、此外,Git 可以设置默认使用 GPG 签名提交:

git config --global commit.gpgsign true
# 或者
git config commit.gpgsign true

在 GitLab 验证提交

1、在 GitLab 提交选项卡,签名的提交将显示包含“ Verified”或“ Unverified”的徽章,具体取决于 GPG 签名的验证状态。

2、通过单击 GPG 徽章,将显示签名的详细信息。

撤销(revoke)或删除 GPG key

此外,还可以撤销(revoke)或删除 GPG key。

它们不同之处在于:

撤销密钥将取消验证已签名的提交,通过使用此密钥验证的提交将变为未验证状态。如果你的密钥已被盗用,则应使用此操作。

删除密钥不会取消验证已签名的提交。使用此密钥验证的提交将保持验证状态。

在 Git 中通过命令行验证相关提交的签名

$ git log --show-signature -1
commit 374010d1af1de40fdf8f1f6f5cca0c0c60e4fe9d (HEAD -> master, origin/master, origin/HEAD)
gpg: 签名建立于 四 10/31 11:24:16 2019 CST
gpg:               使用 RSA 密钥 39033F321A83635ECD7FC8DA66DD4800155F7A2B
gpg: 完好的签名,来自于 “admin <admin@example.com>” [绝对]
Author: admin <admin@example.com>
Date:   Thu Oct 31 11:24:16 2019 +0800

    update README.md
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GitLab 是如何处理 GPG 呢?
  • 生成 GPG 密钥并上传 GPG key 到 GitLab
  • 将 GPG 密钥与 Git 关联
  • 签名提交
  • 在 GitLab 验证提交
  • 撤销(revoke)或删除 GPG key
  • 在 Git 中通过命令行验证相关提交的签名
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档