如何优雅地为 Gitea 设置 GPG Commit Signatures

本文最后更新于:2023年4月29日 下午

前言

本文主要介绍为自建的 Gitea 配置 GPG 自动签名,实现的效果主要是在网页上编辑、merge 等操作的时候会自动签名,详情可以参考 官方文档。具体效果如图所示:

gpg-example

目前在官方文档和 issue 中都没有很详细的操作过程,所以写本文作为记录。

步骤

1. 更新 Gitea

首先务必更新 Gitea 到最新版本。

2. 设置 GNUPGHOME 环境变量(推荐)

由于 Gitea 目前将 ssh 和 gpg 目录移到了配置文件 HOME_PATH(默认%(APP_DATA_PATH)s/home)下,为了方便起见,设置 Docker 环境变量GNUPGHOME 为配置文件中的HOME_PATH,例如:

environment:
  - GNUPGHOME=/data/home/.gnupg

3. 生成 GPG 密钥

首先 务必 通过以下命令进入容器中:

docker exec -it --user git gitea bash

其中 gitea 是你的 Docker 容器名。

然后生成 GPG 密钥,参考 此文档。注意:

  • 名字和邮箱需要正确设置为 之后用于全局签名 的用户名和邮箱。
  • passphrase务必 为空!

生成的后 HOME_PATH 目录(例如/data/home/.gnupg)应当不为空。

关于 GPG 的一些操作

可以用下面的命令查看目前生成的 GPG 密钥:

gpg --list-keys
gpg --list-secret-keys

可以用下面的命令导出生成的 GPG 的公钥和密钥:

gpg --output public.pgp --armor --export username@email
gpg --output private.pgp --armor --export-secret-key username@email

可以用下面的命令删除生成的 GPG 的公钥和密钥:

gpg --delete-secret-key [Key_ID]
gpg --delete-key [Key_ID]

4. 编辑 .gitconfig

[user]块编辑

name = 之前设置的名称
email = 之前设置的邮件
signingkey = GPG 密钥的 ID

其中 GPG 密钥的 ID 可以用 gpg --list-keys 查看,例如:

gpg-list-key

中的E75A026468C8A002F1D008E74EE83E7D175FC6A2

[commit] 块中添加:

gpgsign = true

5. 重启 Gitea

最后重启 Gitea 容器,尝试创建一个新的非空 repo,如果成功且没有 500,即配置成功。

结语

本文目前只是个简单的配置,在官方文档中写道:

It is up to a server administrator to determine how best to install a signing key. Gitea generates all its commits using the server git command at present - and therefore the server gpg will be used for signing (if configured.) Administrators should review best-practices for GPG - in particular it is probably advisable to only install a signing secret subkey without the master signing and certifying secret key.

之后会对本文进行进一步优化,增强安全性。


如何优雅地为 Gitea 设置 GPG Commit Signatures
https://blog.dov.moe/posts/18318/
作者
Dov
发布于
2023年1月18日
许可协议