GPG 签名是对代码提交者进行身份验证的一种弥补,即证明代码提交来密钥持有者,理论上能够保证在现在的破译技术水平下无法篡改内容。您能够运用 GPG 东西 (GNU Privacy Guard) 生成密钥,对 Git 库房中所做的提交进行签名。

Gitea 服务器在检查代码签名时利用用户供给的 GPG 公钥验证代码提交者的身份。假如希望强制启用签名,您能够为您的项目装备分支保护规则,拒绝未运用 GPG 签名的提交,或拒绝来自未验证用户的提交。

GnuPG 实现不同于 OpenPGP,本文运用 GPG 来指代一切 OpenPGP、PGP 和 GPG 相关的东西。

在运用 GPG 签名代码前,需求考虑以下问题:

  • 提交者有必要具有 GPG 密钥对,即公钥私钥。公钥支持揭露共享,私钥不得共享而且有必要加密保存。
  • 提交者的公钥有必要上传到他们的 Gitea 帐户
  • 提交者的电子邮件地址应当与 GPG 密钥中的电子邮件地址相匹配。
  • GPG 公钥中的其中一个电子邮件地址应当与 Gitea 账号中已验证的电子邮件地址匹配
  • 假如要躲藏提交者真实的电子邮件地址,请在 GPG 密钥和 Git 签名中运用 Gitea 主动生成的躲藏电子邮件域,例如 alice@noreply.gitea.io
  • GPG 密钥有四种用途,分别是 签名(S)、加密(E)、认证(A)、授权(C)。这里仅做签名运用。

因为 Gitea 运用自己数据库中的的密钥环来验证 GPG 签名,因而它不依赖任何第三方公钥服务器。

检查任意 Gitea 用户的 GPG 公钥

要检查 Gitea 用户的 GPG 公钥,您能够:

  • 拜访 https://gitea.com/<USERNAME>.gpg
    • 假如用户装备了 GPG 密钥,将显现完好的 GPG 公钥链
    • 没有装备 GPG 密钥的用户将显现 Note: This user hasn't uploaded any GPG keys.
  • 转到用户的账户设置(例如https://gitea.com/user/settings/keys)。在账户设置的顶部导航栏,挑选 SSH / GPG 密钥

装备提交签名

要签名提交,您有必要一起装备本地计算机和 Gitea 帐户:

  1. 创立 GPG 密钥对
  2. 将 GPG 公钥增加到您的帐户
  3. 将您的 GPG 密钥与 Git 相关
  4. 签名您的 Git 提交

创立 GPG 密钥

假如您还没有 GPG 密钥,请创立:

1.依据您的操作系统装置 GnuPG东西。

2.生成您的密钥对:

# 运用根底的密钥生成向导,能够挑选产生 RSA\DSA 密钥对
gpg --full-generate-key
# 或则,运用专家模式,能够挑选更多密钥算法,例如 ECC(本文推荐)
gpg --full-generate-key --expert

3.挑选密钥一个密钥算法,输入对应的数字序号并按 Enter 键承认选项。这里咱们挑选了 (9) ECC and ECC

4.挑选椭圆曲线(elliptic curve)算法时主张选用 (1) Curve 25519

5.指定密钥的有效期限。有效期限属于正人协议,是为了保证密钥在公共密钥服务器上可维护性,这里咱们运用默认值 0 表明永不过期。

6.承认之前的一切装备,请输入 y

7.输入您的姓名。

8.输入您的电子邮件地址。这里的邮箱地址有必要与 Gitea 帐户中的 已验证电子邮件地址 匹配。

9.可选。输入密钥谈论信息,此信息会显现在密钥联系人姓名旁的括号中。

10.最后 GPG 生成向导将显现您之前输入的信息。依据提示重新修改信息或按 O(表明 Okay)继续。

11.输入强暗码,而且再次输入承认。此暗码用于加密 GPG 私钥。

12.列出 公钥 ID,请运转指令 gpg -k,列出 私钥 ID,请运转指令 gpg -K。咱们发现同一个密钥对的私钥和公钥 ID 是一样的。

13.在输出中,找到 pub/sec 所在的阶段,并仿制 GPG 密钥 ID。例如 F4F23C3AEAB6A60030BBC558EA2C102A984A2CD7

$ gpg -k
/home/user/.gnupg/pubring.kbx
------------------------------
pub   ed25519 2022-12-30 [SC]
      F4F23C3AEAB6A60030BBC558EA2C102A984A2CD7
uid           [ultimate] Gitea User (Test) <user@example.com>
sub   cv25519 2022-12-30 [E]

14.要导出公钥,请运转以下指令,将 <ID> 替换为上一步中的 GPG 密钥 ID 或许 邮件地址:

gpg --armor --export <ID>

15.仿制公钥时,应当包含 -----BEGIN PGP PUBLIC KEY BLOCK----------END PGP PUBLIC KEY BLOCK----- 以及其中的一切字段。

将 GPG 密钥增加到您的帐户

将 GPG 密钥增加到您的帐户:

  1. 登录 Gitea。
  2. 在右上角,挑选您的头像。
  3. 挑选 设置
  4. 在顶部导航栏,挑选 SSH / GPG 密钥
  5. 增加密钥 中,张贴您的 公钥
  6. 要将密钥增加到您的帐户,请挑选 增加密钥。Gitea 显现密钥的指纹、电子邮件地址和创立日期:

使用 GPG 签名提交

增加密钥成功后,您将无法再次对其进行修改。您能够删去已有的密钥并重新增加它。假如公钥中的邮箱地址与账户绑定的邮箱地址不匹配,您仍然能够将其增加到 Gitea 公钥链中,但在启用该密钥前需求运用您的私钥进行二次验证,以承认密钥的一切权。

将您的 GPG 密钥与 Git 相关

创立 GPG 密钥并将其增加到您的 Gitea 帐户后,您能够装备 Git 并在提交代码时运用此密钥:

1.运转指令 gpg -k 列出您刚刚创立的 GPG 密钥的 ID。

2.仿制以 pub/sec 开头的 GPG 密钥 ID。在本例中,密钥 ID 为 F4F23C3AEAB6A60030BBC558EA2C102A984A2CD7

$ gpg -k
/home/user/.gnupg/pubring.kbx
------------------------------
pub   ed25519 2022-12-30 [SC]
    F4F23C3AEAB6A60030BBC558EA2C102A984A2CD7
uid           [ultimate] Gitea User (Test) <user@example.com>
sub   cv25519 2022-12-30 [E]

2.运转下面的指令装备 Git 以运用您指定的密钥签名您的提交,将 <KEY ID> 替换为您的 GPG 密钥 ID:

git config --global user.signingkey <KEY ID>

签名您的 Git 提交

将公钥增加到您的帐户后,您能够手动签名单个提交,或将 Git 装备为默认为一切提交签名:

  • 增加 GPG_TTY 增加到本地系统用户的 Bash 环境变量
[ -f ~/.bashrc ] && echo 'export GPG_TTY=$(tty)' >> ~/.bashrc
  • 手动签名单个 Git 提交:

    1. -S 标志增加到您要签名的任何提交:

      git commit -S -m "first commit"
      
    2. 签名时会弹出提示框。问询 GPG 密钥的暗码。

  • (可选)对一切 Git 提交进行签名:

    git config --global commit.gpgsign true
    

验证提交

您能够检查兼并恳求或整个项目的提交:

  1. 检查项目的提交:

    • 在顶部栏上,挑选 菜单 > 项目 并找到您的项目。
    • 在左侧边栏上,挑选 库房 > 提交
  2. 检查兼并恳求的提交:

    • 在顶部栏上,挑选 菜单 > 项目 并找到您的项目。
    • 在左侧边栏上,挑选 兼并恳求,然后挑选您的兼并恳求。
    • 挑选 提交
  3. 确定您要检查的提交。依据 GPG 签名的验证状况,已签名的提交会显现 绿锁黄锁灰锁 徽章。未签名的提交不显现徽章:

    使用 GPG 签名提交

  4. 要显现提交的签名详细信息,请挑选 GPG 签名徽章:

    使用 GPG 签名提交

撤消和删去 GPG 密钥

假如 GPG 密钥被泄露,请即便撤消并从服务器删去密钥。删去密钥后会对之前基于此密钥的提交形成影响,具体表现为:经过此密钥签名的提交被标记为未验证。

要从您的帐户中删去 GPG 密钥:

  1. 在右上角,挑选您的头像。
  2. 挑选 设置
  3. 在顶部导航栏,挑选 SSH / GPG 密钥
  4. 点击要删去的 GPG 密钥旁边的 删去 按钮。