【问题标题】:Sign git commit with x509 certificate in corporate environment在企业环境中使用 x509 证书签署 git commit
【发布时间】:2018-10-13 11:43:50
【问题描述】:

我从文档中了解到可以对 git 标签和提交进行签名。

git config --global user.signingkey 0A46826A

文档:https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work

这适用于 GPG。有人用 X509 用户证书做过类似的事情吗?

看起来 GPG 与 x509 pki 证书不兼容或不能互换。由于这是在公司环境中,GPG 不是一种选择。

如果有人可以分享如何使用 x509 证书完成此操作的想法或经验,那就太好了?实施这样的事情需要什么以及需要什么?

【问题讨论】:

  • 这将在 Git 2.19(2018 年第三季度)中成为可能。见my answer below

标签: git configuration certificate x509


【解决方案1】:

GitHub 提供了一些关于 specifying signing keys 的有用说明,包括如何在 Windows 和 Mac 上使用 smimesign 使用 X.509 证书进行签名。

适用于 Git 2.19 及更高版本

$ git config --global gpg.x509.program smimesign
$ git config --global gpg.format x509

适用于 Git 2.18 及更早版本

$ git config --global gpg.program smimesign

在 Linux 上,您可以改用 gpgme。使用gpgme --import cert.p12 添加您的证书。您可能还需要在 gpgme 之前导入根证书和任何中间证书,以便您签署任何内容。

【讨论】:

    【解决方案2】:

    使用 Git 2.19(2018 年第三季度)应该会更容易,因为“git tag -s”等现在有一些配置变量(gpg.format 可以设置为“openpgp”或“x509”,和gpg.<format>.program 用于指定使用什么程序来处理格式)以允许通过“gpgsm”使用 CMS 的 x.509 证书而不是 通过“gnupg”打开pgp。

    参见commit 53fc999(2018 年 7 月 20 日)、commit 1e7adb9commit b02f51bcommit 42149d7commit 58af57ecommit 57a8dd7(2018 年 7 月 17 日)和commit 1865a64(2018 年 7 月 18 日)@987654 @.
    (由 Junio C Hamano -- gitster -- 合并于 commit 3ec5ebe,2018 年 8 月 15 日)

    这涉及到如下变化:

    gpg-interface:添加新配置以选择如何签署提交

    添加“gpg.format”,用户可以在其中指定要签名的类型 用于提交。

    gpg-interface: 引入多种 gpg 格式的抽象

    创建一个包含支持格式的格式详细信息的结构。
    此提交为引入更多格式做准备,这些格式可能会使用其他程序并匹配其他签名。

    gpg-interface:不再对密钥字符串 len 进行硬编码

    gnupg 确实会打印 keyid 后跟一个空格,然后是签名者。 gpgsm 中也使用了相同的模式,但密钥长度将是 40 而不是 16。

    不是硬编码预期的长度,而是找到第一个空格并计算它。
    现在将忽略与预期格式不匹配的输入,然后我们跳转到可能位于意外字符串末尾的 found+17。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-17
      • 2013-02-23
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多