Skip to main content

关于提交签名验证

使用 GPG、SSH 或 S/MIME,可以在本地对标记和提交进行签名。 这些标记或提交在 GitHub Enterprise Server 上标示为已验证,便于其他人信任更改来自可信的来源。

关于提交签名验证

您可以在本地签署提交和标签,让其他人对您所做更改的源充满信心。 如果提交或标记具有可加密验证的 GPG、SSH 或 S/MIME 签名,GitHub Enterprise Server 会将提交或标记标示为“已验证”。

存储库提交列表中提交的屏幕截图。 “已验证”以橙色边框突出显示。

如果提交或标记具有无法验证的签名,则 GitHub Enterprise Server 会将提交或标记标示为“未验证”。

对于大多数个人用户,GPG 或 SSH 会是对提交进行签名的最佳选择。 在较大型组织的环境中通常需要 S/MIME 签名。 SSH 签名是最容易生成的。 甚至可以将现有身份验证密钥上传到 GitHub Enterprise Server 以用作签名密钥。 生成 GPG 签名密钥比生成 SSH 密钥更复杂,但 GPG 具有 SSH 所没有的功能。 GPG 密钥可以在不再使用时过期或撤销。 GitHub Enterprise Server 将已使用此类密钥进行签名的提交显示为“已验证”,除非密钥标记为已泄露。 SSH 密钥没有此功能。

变基和合并的签名验证

在拉取请求上使用“变基与合并”时,请务必注意,头分支中的提交将添加到基分支,无需提交签名验证。 使用此选项时,GitHub 会使用原始提交的数据和内容创建修改的提交。 这意味着 GitHub 未真正创建此提交,因此无法将其签名为通用系统用户。 GitHub 无权访问提交者的专用签名密钥,因此无法代表用户对提交进行签名。

解决方法是在本地进行变基和合并,然后将更改推送到拉取请求的基分支。

有关详细信息,请参阅“关于 GitHub 上的合并方法”。

仓库管理员可对分析实施必要的提交签名,以阻止未签名和验证的所有提交。 有关详细信息,请参阅“关于受保护分支”。

您可以在 GitHub Enterprise Server 上检查已签名提交或标记的验证状态,并查看提交签名未验证的原因。 有关详细信息,请参阅“检查提交和标记签名验证状态”。

如果站点管理员已启用 Web 提交签名,GitHub Enterprise Server 将自动使用 GPG 对使用 Web 界面所做的提交进行签名。 由 GitHub Enterprise Server 签名的提交将具有已验证状态。 可以使用 https://HOSTNAME/web-flow.gpg 提供的公钥在本地验证签名。 有关详细信息,请参阅“配置 Web 提交签名”。

GPG 提交签名验证

您可以使用 GPG 通过自己生成的 GPG 密钥对验证签名。

GitHub Enterprise Server 使用 OpenPGP 库来确认本地签名的提交和标记,是否根据你在 你的 GitHub Enterprise Server 实例 上添加到帐户的公钥进行加密验证。

要使用 GPG 对提交签名并在 GitHub Enterprise Server 上验证这些提交,请执行以下步骤:

  1. 检查现有 GPG 密钥
  2. 生成新 GPG 密钥
  3. 将 GPG 密钥添加到 GitHub 帐户
  4. 将你的签名密钥告诉 Git
  5. 对提交签名
  6. 对标记签名

SSH 提交签名验证

可以使用 SSH 通过自己生成的 SSH 密钥对提交进行签名。 有关详细信息,请查看 user.SigningkeyGit 参考文档。 如果已使用 SSH 密钥向 GitHub Enterprise Server 进行了身份验证,还可以再次上传该相同密钥以用作签名密钥。 可以添加到帐户的签名密钥数没有限制。

GitHub Enterprise Server 使用 ssh_data(一种开放源代码 Ruby 库)来确认本地签名的提交和标记,是否根据你在 你的 GitHub Enterprise Server 实例 上添加到帐户的公钥进行加密验证。

注意:SSH 签名验证可用于 Git 2.34 或更高版本。 若要更新 Git 版本,请参阅 Git 网站。

要使用 SSH 对提交签名并在 GitHub Enterprise Server 上验证这些提交,请执行以下步骤:

  1. 检查现有 SSH 密钥
  2. 生成新的 SSH 密钥
  3. 将 SSH 签名密钥添加到 GitHub 帐户
  4. 将你的签名密钥告诉 Git
  5. 对提交签名
  6. 对标记签名

S/MIME 提交签名验证

您可以使用 S/MIME 通过组织颁发的 X.509 密钥对提交签名。

GitHub Enterprise Server 使用 Debian ca 证书包(Mozilla 浏览器使用的相同信任存储)确认你本地签名的提交和标记可根据受信任的根证书中的公钥加密验证。

注意:S/MIME 签名验证可用于 Git 2.19 或更高版本。 若要更新 Git 版本,请参阅 Git 网站。

要使用 S/MIME 对提交签名并在 GitHub Enterprise Server 上验证这些提交,请执行以下步骤:

  1. 将你的签名密钥告诉 Git
  2. 对提交签名
  3. 对标记签名

无需将公钥上传到 GitHub Enterprise Server。

延伸阅读