-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathsigning.asc
More file actions
206 lines (157 loc) · 7.13 KB
/
signing.asc
File metadata and controls
206 lines (157 loc) · 7.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
[[_signing]]
////
Laatst bijgewerkt van progit/progit2 referentie: 7836cfed
////
=== Je werk tekenen
Git is cryptografisch veilig, maar beschermt je niet tegen dommigheden.
Als je werk overneemt van anderen op het internet en je wilt verifiëren dat commits van een betrouwbare bron komen, heeft Git een aantal manieren om werk te tekenen en verifiëren met GPG.
==== GPG Introductie
Allereerst, als je iets wilt tekenen zal je eerst GPG moeten hebben geconfigureerd en je persoonlijke sleutel geïnstalleerd.
[source,console]
----
$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 2048R/0A46826A 2014-06-04
uid Scott Chacon (Git signing key) <schacon@gmail.com>
sub 2048R/874529A9 2014-06-04
----
Als je geen sleutel geïnstalleerd hebt, kan je er een genereren met `gpg --gen-key`.
[source,console]
----
gpg --gen-key
----
Als je eenmaal een een privé sleutel hebt om mee te tekenen kan je Git configureren om deze te gebruiken bij het tekenen van spullen door de `user.signingkey` configuratie sleutel te zetten.
[source,console]
----
git config --global user.signingkey 0A46826A
----
Nu zal Git standaard jouw sleutel gebruiken om tags en commits te tekenen als je dat wilt.
==== Tags tekenen
Als je een GPG privé sleutel aangemaakt hebt, kan je deze gebruiken om nieuwe tags te tekenen.
Al wat je hoeft te doen is `-s` te gebruiken in plaats van `-a`:
[source,console]
----
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Ben Straub <ben@straub.cc>"
2048-bit RSA key, ID 800430EB, created 2014-05-04
----
Als je nu `git show` aanroept op die tag, kan je jouw GPG handtekening erbij zien staan:
[source,console]
--------
$ git show v1.5
tag v1.5
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:29:41 2014 -0700
my signed 1.5 tag
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJTZbQlAAoJEF0+sviABDDrZbQH/09PfE51KPVPlanr6q1v4/Ut
LQxfojUWiLQdg2ESJItkcuweYg+kc3HCyFejeDIBw9dpXt00rY26p05qrpnG+85b
hM1/PswpPLuBSr+oCIDj5GMC2r2iEKsfv2fJbNW8iWAXVLoWZRF8B0MfqX/YTMbm
ecorc4iXzQu7tupRihslbNkfvfciMnSDeSvzCpWAHl7h8Wj6hhqePmLm9lAYqnKp
8S5B/1SSQuEAjRZgI4IexpZoeKGVDptPHxLLS38fozsyi0QyDyzEgJxcJQVMXxVi
RUysgqjcpT8+iQM1PblGfHR4XAhuOqN5Fx06PSaFZhqvWFezJ28/CLyX5q+oIVk=
=EFTF
-----END PGP SIGNATURE-----
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
--------
==== Tags verifiëren
Om een getekende tag te verifiëren, gebruik je `git tag -v <tag-naam>`.
Dit commando gebruikt GPG om de handtekening te verifiëren.
Je hebt de publieke sleutel van de tekenaar nodig in je sleutelbos (keyring) om dit goed te laten werken:
[source,console]
----
$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700
GIT 1.4.2.1
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg: aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
----
Als je de publieke sleutel van de tekenaar niet hebt, krijg je iets als dit:
[source,console]
----
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'
----
[[_signing_commits]]
==== Commits tekenen
In meer recente versie van Git (v1.7.9 en later), kan je ook individuele commits tekenen.
Als je geïnteresseerd bent in het tekenen van ook de commits in plaats van alleen de tags, is alles wat je hoeft te doen een `-S` toe te voegen aan je `git commit` commando.
[source,console]
----
$ git commit -a -S -m 'signed commit'
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
[master 5c3386c] signed commit
4 files changed, 4 insertions(+), 24 deletions(-)
rewrite Rakefile (100%)
create mode 100644 lib/git.rb
----
Om deze handtekeningen te zien en te verifiëren, is er ook een `--show-signature` optie bij `git log`.
[source,console]
----
$ git log --show-signature -1
commit 5c3386cf54bba0a33a32da706aa52bc0155503c2
gpg: Signature made Wed Jun 4 19:49:17 2014 PDT using RSA key ID 0A46826A
gpg: Good signature from "Scott Chacon (Git signing key) <schacon@gmail.com>"
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Jun 4 19:49:17 2014 -0700
signed commit
----
Bovendien kan je `git log` configureren om alle handtekeningen die het vind te controleren en deze te laten zien in de uitvoer met het `%G?` formaat.
[source,console]
----
$ git log --pretty="format:%h %G? %aN %s"
5c3386c G Scott Chacon signed commit
ca82a6d N Scott Chacon changed the version number
085bb3b N Scott Chacon removed unnecessary test code
a11bef0 N Scott Chacon first commit
----
Hier kunnen we zien dat alleen de laatste commit is getekend en geldig en de eerdere commits niet.
In Git 1.8.3 en later, kunnen "git merge" en "git pull" verteld worden om te controleren tijdens het mergen van een commit en deze af te wijzen als die geen geverfieerde GPG handtekening heeft met het `--verify-signature` commando.
Als je deze optie gebruikt tijdens het mergen van een branch en die commits bevat die niet getekend en geldig zijn zal de merge niet slagen.
[source,console]
----
$ git merge --verify-signatures non-verify
fatal: Commit ab06180 does not have a GPG signature.
----
Als de merge alleen maar geldig getekende commits bevat, zal het merge commando je alle handtekenignen laten zien die het heeft gecontroleerd en daarna doorgaan met de merge.
[source,console]
----
$ git merge --verify-signatures signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
Updating 5c3386c..13ad65e
Fast-forward
README | 2 ++
1 file changed, 2 insertions(+)
----
Je kunt ook de `-S` optie gebruiken met het `git merge` commando om de merge die het resultaat hiervan is te tekenen.
Het volgende voorbeeld zal zowel elke commit in de te mergen branch verifiëren als de resulterende merge commit tekenen.
[source,console]
----
$ git merge --verify-signatures -S signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
Merge made by the 'recursive' strategy.
README | 2 ++
1 file changed, 2 insertions(+)
----
==== Iedereen moet tekenen
Tags en commits tekenen is geweldig, maar als je besluit dit te gaan gebruiken in je reguliere workflow, moet je er zeker van zijn dat iedereen in je team begrijpt hoe dit te doen.
Als je dat niet doet, ga je erg veel tijd kwijt zijn met het uitleggen aan mensen hoe ze hun commits moeten vervangen met getekende versies.
Zorg ervoor dat je GPG begrijpt en het voordeel van getekende dingen voordat je dit gaat gebruiken als onderdeel van je reguliere workflow.