Skip to main content

Configuring web commit signing

You can enable auto-signing of commits made in the web interface of GitHub Enterprise Server.

Who can use this feature

Site administrators can configure web commit signing for your GitHub Enterprise Server instance.

About web commit signing

If you enable web commit signing, GitHub Enterprise Server will automatically use GPG to sign commits users make on the web interface of your GitHub Enterprise Server instance. Commits signed by GitHub Enterprise Server will have a verified status. For more information, see "About commit signature verification."

You can enable web commit signing, rotate the private key used for web commit signing, and disable web commit signing.

Enabling web commit signing

  1. 在管理 shell 中,创建 PGP 密钥。 记下电子邮件地址和密钥 ID。

    Shell
    gpg --full-generate-key --pinentry-mode=loopback
    • 使用默认密钥类型,并且至少有 4096 位且未过期。
    • 使用 web-flow 作为用户名。
    • Use web-flow as the username. If web-flow is unavailable or unusable, use any new unique username. Use this username throughout the following steps in this article.
    • If you have a no-reply email address defined in the 管理控制台, use that email address. If not, use any email address, such as web-flow@my-company.com. The email address does not need to be valid.
  • PGP 密钥未能受到通行短语保护。
  1. 将密钥定义为 GitHub Enterprise Server 的环境变量,将 <YOUR-KEY-ID> 替换为 GPG 密钥 ID。

    Shell
    ghe-config "secrets.gpgverify.web-signing-key" "$(gpg --export-secret-keys -a <YOUR-KEY-ID> | awk '{printf "%s\\n", $0}')"
  2. 更新 GitHub Enterprise Server 提交签名服务的设置。

    Shell
    sudo consul-template -once -template /etc/consul-templates/etc/nomad-jobs/gpgverify/gpgverify.hcl.ctmpl:/etc/nomad-jobs/gpgverify/gpgverify.hcl
     
    nomad job run /etc/nomad-jobs/gpgverify/gpgverify.hcl
  3. Enable web commit signing.

    Shell
    ghe-config app.github.web-commit-signing-enabled true
  4. Apply the configuration, then wait for the configuration run to complete.

    Shell
    ghe-config-apply
  5. Create a new user on your GitHub Enterprise Server instance via built-in authentication or external authentication. For more information, see "About authentication for your enterprise."

    • The user's username must be the same username you used when creating the PGP key in step 1 above, for example, web-flow.
    • The user's email address must be the same address you used when creating the PGP key.
  6. 运行以下命令,将 KEY-ID 替换为 PGP 密钥 ID。

    Shell
    gpg --armor --export KEY-ID
  7. 复制以 -----BEGIN PGP PUBLIC KEY BLOCK----- 开头并以 -----END PGP PUBLIC KEY BLOCK----- 结尾的 PGP 密钥。

  8. web-flow 用户身份登录 GitHub Enterprise Server。

  9. 将公共 PGP 密钥添加到用户配置文件。 有关详细信息,请参阅“将 GPG 密钥添加到 GitHub 帐户”。

    注意:不要从 GPG 密钥列表中删除其他公钥。 如果删除公钥,则使用相应私钥签名的任何提交都将不再标记为已验证。

  10. 从 GitHub Enterprise Server 上的管理帐户任意页面的右上角,单击

    用于访问站点管理员设置的火箭图标的屏幕截图

  11. 如果你尚未在“站点管理员”页上,请在左上角单击“站点管理员”。

    “站点管理员”链接的屏幕截图 1. 在左侧边栏中,单击“管理控制台”。 左侧边栏中的 管理控制台 选项卡

  12. 在页面顶部,单击“设置”。 “设置”选项卡

  13. 在左侧边栏中,单击“电子邮件”。 “电子邮件”选项卡

  14. Under "No-reply email address", type the same email address you used when creating the PGP key.

    Note: The "No-reply email address" field will only be displayed if you've enabled email for your GitHub Enterprise Server instance. For more information, see "Configuring email for notifications."

  15. 在左侧边栏下,单击“保存设置”。

    管理控制台 中的“保存设置”按钮的屏幕截图

    注意:保存 管理控制台 中的设置会重启系统服务,这可能会导致用户可察觉的停机时间。

  16. 等待配置运行完毕。

    配置实例

Rotating the private key used for web commit signing

  1. 在管理 shell 中,创建 PGP 密钥。 记下电子邮件地址和密钥 ID。

    Shell
    gpg --full-generate-key --pinentry-mode=loopback
    • 使用默认密钥类型,并且至少有 4096 位且未过期。
    • 使用 web-flow 作为用户名。
    • Use the web commit signing user's username, for example, web-flow.
    • Use the no-reply email address defined in the 管理控制台, which should be the same as the email address of the web commit signing user, for example, web-flow.
  • PGP 密钥未能受到通行短语保护。
  1. 将密钥定义为 GitHub Enterprise Server 的环境变量,将 <YOUR-KEY-ID> 替换为 GPG 密钥 ID。

    Shell
    ghe-config "secrets.gpgverify.web-signing-key" "$(gpg --export-secret-keys -a <YOUR-KEY-ID> | awk '{printf "%s\\n", $0}')"
  2. 更新 GitHub Enterprise Server 提交签名服务的设置。

    Shell
    sudo consul-template -once -template /etc/consul-templates/etc/nomad-jobs/gpgverify/gpgverify.hcl.ctmpl:/etc/nomad-jobs/gpgverify/gpgverify.hcl
     
    nomad job run /etc/nomad-jobs/gpgverify/gpgverify.hcl
  3. 运行以下命令,将 KEY-ID 替换为 PGP 密钥 ID。

    Shell
    gpg --armor --export KEY-ID
  4. 复制以 -----BEGIN PGP PUBLIC KEY BLOCK----- 开头并以 -----END PGP PUBLIC KEY BLOCK----- 结尾的 PGP 密钥。

  5. web-flow 用户身份登录 GitHub Enterprise Server。

  6. 将公共 PGP 密钥添加到用户配置文件。 有关详细信息,请参阅“将 GPG 密钥添加到 GitHub 帐户”。

    注意:不要从 GPG 密钥列表中删除其他公钥。 如果删除公钥,则使用相应私钥签名的任何提交都将不再标记为已验证。

Disabling web commit signing

You can disable web commit signing for your GitHub Enterprise Server instance.

  1. In the administrative shell, run the following command.

    Shell
    ghe-config app.github.web-commit-signing-enabled false
  2. Apply the configuration.

    Shell
    ghe-config-apply