带GPG签名的Git tag

使用git 打标签时使用gpg加密

GPG是加密软件,可以使用GPG生成的公钥在网上安全的传播你的文件、代码。
为什么说安全的?以Google所开发的repo为例,repo即采用GPG验证的方式,每个里程碑tag都带有GPG加密验证,假如在里程碑v1.12.3处你想要做修改,修改完后将这个tag删除,然后又创建同名tag指向你的修改点,这必然是可以的。但是,在你再次clone你修改后的项目时,你会发现,你对此里程碑tag的改变不被认可,验证失败,导致你的修改在这里无法正常实现。这就是GPG验证的作用,这样就能够保证项目作者(私钥持有者)所制定的里程碑别人将无法修改。那么,就可以说,作者的代码是安全传播的。
为什么会有这种需求?一个项目从开发到发布,再到后期的更新迭代,一定会存在若干的稳定版本与开发版本(存在不稳定因素)。作为项目发起者、持有者,有权定义他(们)所认可的稳定版本,这个稳定版本,将不允许其他开发者进行改动。还以Google的repo项目为例,项目所有者定义项目开发过程中的点A为稳定版v1.12.3,那么用户在下载v1.12.3版本后,使用的肯定是A点所生成的项目、产品,就算其他开发者能够在本地对v1.12.3进行重新指定,指定到他们修改后的B点,但是最终修改后的版本给用户用的时候,会出现GPG签名验证不通过的问题,也就是说这样的修改是不生效的。
说了这么多,希望大家能够理解GPG签名验证的意义所在。下边就说一说,如何在你的项目中使用这种方式。

分步指南

  1. git tag常见用法

    1.1 创建Tag

    git tag v1.0 //标记当前位置为tag,tag名为v1.0

    git tag -m "Say something" v1.0 //标记当前位置为tag,tag描述为”Say something”, tag名为v1.0

    1.2 列出tag表

    git tag (-l) //列出tag表,只显示标签名

    git tag -ln //列出tag表,并显示其message(描述)

    1.3 删除tag

    git tag -d [tag name] //删除某个tag

    1.4 验证tag

    git tag -v [tag name] //验证某个tag的GPG签名

  2. 生成GPG Key

    2.1生成GPG Key,

    安装之后打开git bash,输入:gpg --gen-key
    然后根据提示选择你要的签名
    gpg (GnuPG) 1.4.20; Copyright (C) 2015 Free Software Foundation, Inc.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

    2.2 请选择您要使用的密钥种类:

       (1) RSA and RSA (default)
       (2) DSA and Elgamal
       (3) DSA (仅用于签名)
       (4) RSA (仅用于签名)
    您的选择? //选择加密种类,直接回车用默认的

    2.3 RSA 密钥长度应在 1024 位与 4096 位之间。

    您想要用多大的密钥尺寸?(2048)   //选择加密种类,直接回车用默认的

    2.4 请设定这把密钥的有效期限。

             0 = 密钥永不过期
          <n>  = 密钥在 n 天后过期
          <n>w = 密钥在 n 周后过期
          <n>m = 密钥在 n 月后过期
          <n>y = 密钥在 n 年后过期
    密钥的有效期限是?(0) 选择密钥有效期
    对以上信息进行确认,然后输入身份,最终确认,等待生成GPG Key。
    您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合
    成用户标识,如下所示:
        wangjs (qn gpg for git) <[email protected]>
    真实姓名: wangjs
    电子邮件地址: [email protected]
    注释: qn gpg for git
    您选定了这个用户标识:
        wangjs (qn gpg for git) <[email protected]>

    2.5 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O

    您需要一个密码来保护您的私钥。
    稍等片刻,GPG Key就能生成好了,验证一下是否生成成功:
    gpg --list-keys
    如果输出类似信息就代表属于你的GPG Key生成成功了:
    /c/Users/jueye/.gnupg/pubring.gpg
    ---------------------------------
    pub   2048R/B54708D0 2017-11-13
    uid                  wangjs (qn gpg for git) <[email protected]>
    sub   2048R/05CDF7A8 2017-11-13
    上边显示的是公钥,顺便也看一下与之匹配的私钥生成如何:
    gpg --list-secret-keys
    如果成功,会显示类似信息,不过文件位置应该是/c/Users/jueye/.gnupg/secring.gpg(jueye是我的用户名,你的机器上该是你的)

  3. 使用GPG加密tag3.1 创建加密标签

    3.1 git tag -s v4.0 -m "v4.0"  //是的,将-m 换做-s就是加密签名了

    不过,好像很多人会出现错误,比如:

    gpg: WARNING: using insecure memory!

    gpg: please see http://www.gnupg.org/documentation/faqs.html for more information

    gpg: skipped "wuhl <[email protected]>": secret key not available

   gpg: signing failed: secret key not available

   error: gpg failed to sign the data

   error: unable to sign the tag

           3.2 这个错误一Google的话都是教你怎么生成一个GPG Key

          其实不然,git tag有一条help这样写到:

          -u, --local-user <key-id> 使用另一个Key签名此tag

          解决:

          git tag -u wangjs -m "v4.0" v4.0  //输入密码

          这样,tag就用刚刚生成的GPG Key签名了。

          3.3 可以查看一下项目的tag验证信息:

          git tag -v v4.0

          终端输出:      

  object fd3f66b9a6ea5ffe7bfe8a004855f0d84b9f372b
  type commit
  tag v4.0
  tagger wuhl <[email protected]> 1510541245 +0800
  v4.0
  gpg: WARNING: using insecure memory!
  gpg: please see http://www.gnupg.org/documentation/faqs.html for more information
  gpg: Signature made 2017年11月13日 10:47:25
  gpg:                using RSA key B9AA825CB54708D0
  gpg: Good signature from "wangjs (qn gpg for git) <[email protected]>"

猜你喜欢

转载自blog.csdn.net/caide3/article/details/78518685
今日推荐