Git에서 GPG key로 signoff 하기
Posted: October 9, 2015 Filed under: Code, FOSS | Tags: git, gpg Leave a comment공헌자들 패치를 받아서 커밋할 때, 컨트리뷰터의 author를 유지하면서 또한 커미터가 직접 확인했다는 증명을 signoff 기능을 통해 할 수 가 있다. 그런데 signoff 가 단순하게 커밋로그에 남는 ‘메일 주소와 이름 뿐’인 태그일 뿐이라서 진짜 그 사람이 signoff를 했는지 증명하는 것이 어렵다는 문제가 있다. 다행히 git에서는 GPG key를 이용한 signoff 기능을 제공한다. 우선은 내가 볼 목적으로 그리고 동료들에게 설명할 목적으로 정리를 해본다.
GPG에 대한 사용법은 생략한다. 우선 자신의 Key id를 얻는다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ gpg –list-secret-keys | grep ^sec | |
sub 4096R/4CFE2390 2013-10-16 [expires: 2017-10-16] | |
# ^— your key id |
그리고 git config의 user.signingkey로 GPG key id를 설정한다. 각 repository 마다 설정하고 싶으면 –global 옵션을 빼면 지정 repository에만 (현재 디렉토리의 git repository) 지정할 수 있다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# remove –global to use this key only on the current repository | |
$ git config –global user.signingkey 4CFE2390 | |
# ^- replace with your key id |
그리고 커밋을 한다. 아래 옵션이 많지만 GPG key로 사인을 위한 옵션은 -S 이다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
hyunsik@workstation:~/Code/tajo/tajo$ git commit -S -m "TAJO-1909: Eliminate remained explicit diamond expressions."</code> | |
You need a passphrase to unlock the secret key for | |
user: "Hyunsik Choi <hyunsik@apache.o….>" | |
4096-bit RSA key, ID 4CFE2390, created 2013-10-16 (main key ID AC3885B9) | |
[master 6bc9fbb] TAJO-1909: Eliminate remained explicit diamond expressions. | |
Author: Dongkyu Hwangbo <hwang….@gma……>; | |
Date: Thu Oct 8 15:02:58 2015 -0700 | |
72 files changed, 150 insertions(+), 147 deletions(-) |
GPG key-agent가 켜져 있다면 패스워드 직접 입력없이 자동으로 위에서 설정한 키로 사인과 함께 커밋이 된다. 그럼 확인해보자.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
hyunsik@workstation:~/Code/tajo/tajo$ git log –show-signature | |
commit 6bc9fbb50fb8b45d3fd58d9f10f74fefe62106fe | |
gpg: Signature made Thu 08 Oct 2015 03:15:39 PM PDT using RSA key ID 4CFE2390 | |
gpg: Good signature from "Hyunsik Choi <hyunsik@apach.o..>" | |
gpg: WARNING: This key is not certified with a trusted signature! | |
gpg: There is no indication that the signature belongs to the owner. | |
Primary key fingerprint: 9141 BD40 6A84 DBA1 F4BD 5F04 024C 922A AC38 85B9 | |
Subkey fingerprint: 1BB1 D697 599C 74BD C917 2F89 FE68 DD32 4CFE 2390 |
‘not certified’라고 나올 수 가 있다. key가 로컬 머신에 등록되어 있지만 trust key로 설정되어 있지 않아서 그렇다고 한다 (자세히는 모름). 해결은 아래와 같이 --edit-key
옵션으로 한다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
hyunsik@workstation:~/Code/tajo/tajo$ gpg –edit-key 4CFE2390 trust | |
gpg (GnuPG) 1.4.18; Copyright (C) 2014 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. | |
Secret key is available. | |
pub 4096R/AC3885B9 created: 2013-10-16 expires: 2017-10-16 usage: SCEA | |
trust: unknown validity: unknown | |
sub 4096R/4CFE2390 created: 2013-10-16 expires: 2017-10-16 usage: SEA | |
[ unknown] (1). Hyunsik Choi <hyunsik@apach.o….>; | |
pub 4096R/AC3885B9 created: 2013-10-16 expires: 2017-10-16 usage: SCEA | |
trust: unknown validity: unknown | |
sub 4096R/4CFE2390 created: 2013-10-16 expires: 2017-10-16 usage: SEA | |
[ unknown] (1). Hyunsik Choi <hyunsik@apach.o….>; | |
Please decide how far you trust this user to correctly verify other users' keys | |
(by looking at passports, checking fingerprints from different sources, etc.) | |
1 = I don't know or won't say | |
2 = I do NOT trust | |
3 = I trust marginally | |
4 = I trust fully | |
5 = I trust ultimately | |
m = back to the main menu | |
Your decision? 5 | |
Do you really want to set this key to ultimate trust? (y/N) y |
그리고 다시 확인해보자.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
hyunsik@workstation:~/Code/tajo/tajo$ git log –show-signature | |
commit 5d470bc6001bb4fe096d7a8d221e51c18c683899 | |
gpg: Signature made Thu 08 Oct 2015 03:21:24 PM PDT using RSA key ID 4CFE2390 | |
gpg: Good signature from "Hyunsik Choi " |
Warning이 없어진 것을 알 수 있다.