发布签名#
为了证明模块的发布标签是由该模块的维护者创建的,并且自创建以来未被恶意方篡改,对标签进行签名非常重要。
虽然 GitLab 目前为 GNOME 提供了源代码完整性的保证,但 git 仓库本身是源代码的规范存储,并且在其中标记的发布版本可能会比 GNOME 使用 GitLab 的时间更长。
为了对发布进行签名,进行发布的维护者需要设置好与 git 配合使用的 GPG 密钥,并且需要发布该密钥的公钥部分。密钥的私钥部分必须保密,甚至不能与其他的 GNOME 开发者共享。
目前,git 支持使用 GPG 和 SSH 密钥来签名标签——但 GitLab 无法识别这些签名。 GitLab 可能会在未来获得此功能。
您可以选择使用 GPG 密钥或 SSH 密钥,两者是等效的。本文档使用 GPG 密钥,因为其 git 工具支持更加成熟。一些维护者可能更喜欢使用 SSH 密钥——这是受支持的,但他们必须找到一种发布其公钥部分的方法。
对发布进行签名所提供的保证取决于维护者的密钥保持私密(证明只有他们才能创建发布)和一致性(证明由同一个人创建了多个发布)。因此,仅生成一个密钥并将其用于多个发布非常重要。不要为每个发布生成新的密钥。
准备签名发布#
为了对发布进行签名,该版本的提交需要被签名(请参阅 创建发布)。您也可以选择签名所有提交。要进行设置,请按照 GitLab 的说明
创建一个 GPG 密钥,使用与您用于编写 Git 提交相同的电子邮件地址
将您的 GPG 密钥添加到您的 gitlab.gnome.org 帐户,并
将您的 GPG 密钥与 Git 关联。
这只需要设置一次,然后该密钥应该被重新用于签名所有未来的发布。
运行 gpg --send-keys <key ID> 将您的密钥的公钥部分发送到公共密钥服务器,以便任何人都可以查询它,也是一个好主意。
完成这些步骤后,您就可以创建签名发布,如 创建发布 中所述。
验证发布#
为了验证发布,首先获取用于签名发布的维护者的密钥的公钥部分。如果密钥已发布到 gitlab.gnome.org,可以使用 gpg --fetch-keys https://gitlab.gnome.org/<username>.gpg 获取公钥部分,其中 username 是维护者的 gitlab.gnome.org 用户名。
有两种主要方法可以验证发布:git evtag 和 git tag。您使用哪种方法来验证发布取决于发布是如何签名的。
使用 git-evtag 签名的发布在标签消息中有一个 Git-EVTag 段落。可以使用以下命令进行验证:
git checkout <tag>
git evtag verify <tag>
如果标签消息不包含 Git-EVTag,可以使用以下命令进行验证:
git tag -v <tag>
使用 git-evtag 签名的发布也可以通过这种方式进行验证,但保证较少。