gpg-sign.md 8.2 KB
Newer Older
Lab机器人's avatar
Lab机器人 已提交
1
# GPG签名提交[](#gpg-sign "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
2

Lab机器人's avatar
Lab机器人 已提交
3
您可以使用 GPG 密钥对在 CODEChina 代码仓库中的 Git 提交进行签名。 如果可以验证提交者的身份,则已签名的提交将标记为 **已验证**,为了验证提交者的身份,CODEChina 需要他们的公共 GPG 密钥。
Lab机器人's avatar
readme  
Lab机器人 已提交
4

Lab机器人's avatar
Lab机器人 已提交
5
目前尚不支持通过 GPG 验证标签。
Lab机器人's avatar
readme  
Lab机器人 已提交
6

Lab机器人's avatar
Lab机器人 已提交
7
## GPG 签名[](#how-we-handles-gpg "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
8

Lab机器人's avatar
Lab机器人 已提交
9
CODEChina 使用其自己的密钥环来验证 GPG 签名,它不访问任何公钥服务器。
Lab机器人's avatar
readme  
Lab机器人 已提交
10

Lab机器人's avatar
Lab机器人 已提交
11
对于要由 CODEChina 验证的提交:
Lab机器人's avatar
readme  
Lab机器人 已提交
12

Lab机器人's avatar
Lab机器人 已提交
13 14 15 16
*   提交者必须具有 GPG 公钥/私钥对
*   提交者的公钥必须已上传到其 CODEChina 帐户
*   GPG 密钥中的一封电子邮件必须与提交者在 CODEChina 中使用的**经过验证的**电子邮件地址匹配
*   提交者的电子邮件地址必须与 GPG 密钥中验证的电子邮件地址匹配
Lab机器人's avatar
readme  
Lab机器人 已提交
17

Lab机器人's avatar
Lab机器人 已提交
18
## 生成 GPG 密钥[](#generating-a-gpg-key "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
19

Lab机器人's avatar
Lab机器人 已提交
20
如果您还没有 GPG 密钥,建议您参考以下步骤生成您的 GPG 密钥:
Lab机器人's avatar
readme  
Lab机器人 已提交
21

Lab机器人's avatar
Lab机器人 已提交
22 23
1.  为您的操作系统[安装 GPG](https://www.gnupg.org/download/index.html)。如果您的操作系统安装了`gpg2`,在下面的命令中用`gpg2`替换`gpg`即可。
2.  使用以下命令生成私钥/公钥对,并根据系统引导一步步设置:
Lab机器人's avatar
readme  
Lab机器人 已提交
24

Lab机器人's avatar
Lab机器人 已提交
25
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
26 27 28 29
    gpg --full-gen-key 
    ```

    **注意:**在某些情况下,例如 Windows 和其他 macOS 版本上的 Gpg4win,此处的命令可能是`gpg --gen-key` .
Lab机器人's avatar
Lab机器人 已提交
30
3.  第一步需要选择使用哪种算法,选择所需的类型或按`Enter 键`选择默认类型(RSA 和 RSA):
Lab机器人's avatar
readme  
Lab机器人 已提交
31

Lab机器人's avatar
Lab机器人 已提交
32
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
33 34 35 36 37 38 39 40
    Please select what kind of key you want:
       (1) RSA and RSA (default)
       (2) DSA and Elgamal
       (3) DSA (sign only)
       (4) RSA (sign only)
    Your selection? 1 
    ```

Lab机器人's avatar
Lab机器人 已提交
41
4.  下一步是密钥长度,我们建议您选择`4096`
Lab机器人's avatar
readme  
Lab机器人 已提交
42

Lab机器人's avatar
Lab机器人 已提交
43
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
44 45 46 47 48
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (2048) 4096
    Requested keysize is 4096 bits 
    ```

Lab机器人's avatar
Lab机器人 已提交
49
5.  接下来指定密钥的有效期,由您自己设置,您也可以使用永远不会过期的默认值:
Lab机器人's avatar
readme  
Lab机器人 已提交
50

Lab机器人's avatar
Lab机器人 已提交
51
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
52 53 54 55 56 57 58 59 60 61
    Please specify how long the key should be valid.
             0 = key does not expire
          <n>  = key expires in n days
          <n>w = key expires in n weeks
          <n>m = key expires in n months
          <n>y = key expires in n years
    Key is valid for? (0) 0
    Key does not expire at all 
    ```

Lab机器人's avatar
Lab机器人 已提交
62
6.  接下来通过输入`y`确认您给出的答案是正确的:
Lab机器人's avatar
readme  
Lab机器人 已提交
63

Lab机器人's avatar
Lab机器人 已提交
64
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
65 66 67
    Is this correct? (y/N) y 
    ```

Lab机器人's avatar
Lab机器人 已提交
68
7.  接下来输入您的真实姓名,与此密钥关联的电子邮件地址(应与您在 CODEChina 中使用的经过验证的电子邮件地址匹配)和可选注释(按`Enter`跳过):
Lab机器人's avatar
readme  
Lab机器人 已提交
69

Lab机器人's avatar
Lab机器人 已提交
70
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
71 72 73 74 75 76 77 78 79 80 81
    GnuPG needs to construct a user ID to identify your key.

    Real name: Mr. Robot
    Email address: <your_email>
    Comment:
    You selected this USER-ID:
        "Mr. Robot <your_email>"

    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O 
    ```

Lab机器人's avatar
Lab机器人 已提交
82 83
8.  接下来设置一个强密码,然后输入两次以确认
9.  到这一步您的 GPG 密钥已经生成,您可以使用以下命令列出刚刚创建好的私密 GPG 密钥:
Lab机器人's avatar
readme  
Lab机器人 已提交
84

Lab机器人's avatar
Lab机器人 已提交
85
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
86 87 88
    gpg --list-secret-keys --keyid-format LONG <your_email> 
    ```

Lab机器人's avatar
Lab机器人 已提交
89
    将`<your_email>`替换为您在上面输入的电子邮件地址。
Lab机器人's avatar
readme  
Lab机器人 已提交
90

Lab机器人's avatar
Lab机器人 已提交
91
10.  复制以`sec`开头的 GPG 密钥 ID, 在以下示例中,即`30F2B65B9246B6CA`
Lab机器人's avatar
readme  
Lab机器人 已提交
92

Lab机器人's avatar
Lab机器人 已提交
93
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
94 95 96 97 98 99 100 101
    sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
          D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
    uid                   [ultimate] Mr. Robot <your_email>
    ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E] 
    ```

11.  导出该 ID 的公共密钥(替换上一步中的密钥 ID):

Lab机器人's avatar
Lab机器人 已提交
102
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
103 104 105
    gpg --armor --export 30F2B65B9246B6CA 
    ```

Lab机器人's avatar
Lab机器人 已提交
106
12.  最后一步,复制公钥并将其[添加到您的个人资料设置中](#adding-a-gpg-key-to-your-account)即可
Lab机器人's avatar
readme  
Lab机器人 已提交
107

Lab机器人's avatar
Lab机器人 已提交
108
## 在您的账号中添加 GPG 密钥[](#adding-a-gpg-key-to-your-account "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
109

Lab机器人's avatar
Lab机器人 已提交
110
**注意:**添加密钥后,就无法对其进行编辑,只能将其删除。如果粘贴无效,则必须删除有问题的密钥并重新添加。
Lab机器人's avatar
readme  
Lab机器人 已提交
111 112 113

您可以在个人资料的设置中添加 GPG 密钥:

Lab机器人's avatar
Lab机器人 已提交
114
1.  点击右上角的头像,然后转到**"设置"** 
Lab机器人's avatar
readme  
Lab机器人 已提交
115

Lab机器人's avatar
Lab机器人 已提交
116
2.  点击**GPG 密钥**,然后将您的*公共*密钥粘贴到"密钥"框中
Lab机器人's avatar
readme  
Lab机器人 已提交
117

Lab机器人's avatar
Lab机器人 已提交
118
3.  最后,单击**添加键**将其添加到 CODEChina,您将能够看到其指纹,相应的电子邮件地址和创建日期
Lab机器人's avatar
readme  
Lab机器人 已提交
119

Lab机器人's avatar
Lab机器人 已提交
120
## 在 Git 中使用 GPG 密钥[](#associating-your-gpg-key-with-git "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
121

Lab机器人's avatar
Lab机器人 已提交
122
[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,就可以开始在 git 中开始使用您的 GPG 密钥了。
Lab机器人's avatar
readme  
Lab机器人 已提交
123 124 125

1.  使用以下命令列出您刚刚创建的私密 GPG 密钥:

Lab机器人's avatar
Lab机器人 已提交
126
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
127 128 129
    gpg --list-secret-keys --keyid-format LONG <your_email> 
    ```

Lab机器人's avatar
Lab机器人 已提交
130
    将`<your_email>`替换为您在上面输入的电子邮件地址
Lab机器人's avatar
readme  
Lab机器人 已提交
131

Lab机器人's avatar
Lab机器人 已提交
132
2.  复制以`sec`开头的 GPG 密钥 ID,在以下示例中,即`30F2B65B9246B6CA`
Lab机器人's avatar
readme  
Lab机器人 已提交
133

Lab机器人's avatar
Lab机器人 已提交
134
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
135 136 137 138 139 140 141 142
    sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
          D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
    uid                   [ultimate] Mr. Robot <your_email>
    ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E] 
    ```

3.  告诉 Git 使用该密钥对提交进行签名:

Lab机器人's avatar
Lab机器人 已提交
143
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
144 145 146
    git config --global user.signingkey 30F2B65B9246B6CA 
    ```

Lab机器人's avatar
Lab机器人 已提交
147
    不要忘了用您的 GPG 密钥 ID 替换`30F2B65B9246B6CA` 
Lab机器人's avatar
readme  
Lab机器人 已提交
148 149 150 151 152 153 154

4.  (可选)如果 Git 使用`gpg`并且出现诸如`secret key not available``gpg: signing failed: secret key not available` ,请运行以下命令更改为`gpg2`

    ```
    git config --global gpg.program gpg2 
    ```

Lab机器人's avatar
Lab机器人 已提交
155
## GPG 签名提交[](#signing-commits "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
156 157 158 159 160

[创建 GPG 密钥](#generating-a-gpg-key)并将其[添加到您的帐户之后](#adding-a-gpg-key-to-your-account) ,您可以开始对提交进行签名:

1.  像以前一样提交,唯一的区别是添加了`-S`标志:

Lab机器人's avatar
Lab机器人 已提交
161
    ```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
162 163 164
    git commit -S -m "My commit msg" 
    ```

Lab机器人's avatar
Lab机器人 已提交
165 166
2.  按提示输入 GPG 密钥的密码
3.  推送至 CODEChina 并检查您的提交[是否已通过验证](#verifying-commits) 
Lab机器人's avatar
readme  
Lab机器人 已提交
167 168 169

如果您不想在每次提交时都键入`-S`标志,则可以告诉 Git 自动签名您的提交:

Lab机器人's avatar
Lab机器人 已提交
170
```markdown
Lab机器人's avatar
readme  
Lab机器人 已提交
171 172 173
git config --global commit.gpgsign true 
```

Lab机器人's avatar
Lab机器人 已提交
174
## 验证提交[](#verifying-commits "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
175

Lab机器人's avatar
Lab机器人 已提交
176
1.  在项目或[合并请求](/docs/user/project/merge-request)中,切换到" **提交"**选项卡,签名的提交将显示包含" Verified"或" Unverified"的徽章,具体取决于 GPG 签名的验证状态
Lab机器人's avatar
readme  
Lab机器人 已提交
177

Lab机器人's avatar
Lab机器人 已提交
178
    [![Signed and unsigned commits](/docs/img/project_signed_and_unsigned_commits.png)](/docs/img/project_signed_and_unsigned_commits.png)
Lab机器人's avatar
readme  
Lab机器人 已提交
179

Lab机器人's avatar
Lab机器人 已提交
180
2.  通过单击 GPG 徽章,将显示签名的详细信息
Lab机器人's avatar
readme  
Lab机器人 已提交
181

Lab机器人's avatar
Lab机器人 已提交
182
    [![Signed commit with verified signature](/docs/img/project_signed_commit_unverified_signature.png)](/docs/img/project_signed_commit_unverified_signature.png)
Lab机器人's avatar
readme  
Lab机器人 已提交
183

Lab机器人's avatar
Lab机器人 已提交
184
## 撤销 GPG 密钥[](#revoking-a-gpg-key "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
185

Lab机器人's avatar
Lab机器人 已提交
186
撤消密钥将**取消验证**已签名的提交,使用此密钥验证的提交将变为未验证状态。撤销此密钥后,将来的提交也将保持不变. 如果您的密钥已被盗用,则应使用此操作。
Lab机器人's avatar
readme  
Lab机器人 已提交
187 188 189

撤销 GPG 密钥:

Lab机器人's avatar
Lab机器人 已提交
190 191 192
1.  点击右上角的头像,然后转到**"设置"**
2.  点击**GPG 键**标签
3.  单击您要删除的 GPG 键旁边**的撤消** 
Lab机器人's avatar
readme  
Lab机器人 已提交
193

Lab机器人's avatar
Lab机器人 已提交
194
## 删除 GPG 密钥[](#removing-a-gpg-key "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
195

Lab机器人's avatar
Lab机器人 已提交
196
删除密钥**不会**取消已提交签名的**验证**状态,使用此密钥验证的提交将保持验证状态。删除此密钥后,只有未提交的才会保持未验证状态。要取消验证已签名的提交,您需要从您的帐户中[撤销关联的 GPG 密钥](#revoking-a-gpg-key)
Lab机器人's avatar
readme  
Lab机器人 已提交
197 198 199

要从您的帐户中删除 GPG 密钥,请执行以下操作:

Lab机器人's avatar
Lab机器人 已提交
200 201 202
1.  点击右上角的头像,然后转到**"设置"** 
2.  点击**GPG 键**标签
3.  单击您要删除的 GPG 密钥旁边的删除图标
Lab机器人's avatar
readme  
Lab机器人 已提交
203

Lab机器人's avatar
Lab机器人 已提交
204
## 拒绝未签名的提交[](#rejecting-commits-that-are-not-signed-premium "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
205

Lab机器人's avatar
Lab机器人 已提交
206
您可以将您的项目配置为拒绝不是通过[推送规则进行](/docs/user/project/push-rules) GPG 签名的提交