GitHub에서 GPG 서명하기 (for OS X)

OS X 환경에서 GitHub에 GPG 서명을 하는 과정에 대하여

최근 GitHub에 GPG 서명 기능이 추가되었다. Git에선 커밋할 때 GPG를 통해서 서명하는 기능이 원래 있었지만, 최근에서야 GitHub에서 이 기능을 제대로 지원하기 시작했다. GPG 서명이 된 커밋의 경우 위 사진과 같이 우측에 Verified라는 버튼이 생기며 이 버튼을 통해 커밋을 한 당사자에 대한 정보를 확인할 수 있다.

Git에 GPG 서명이 필요한 이유

~/.gitconfig 파일을 가보면 커밋을 한 author에 대한 정보가 적혀있다. 그 정보로는 유저 네임, 이메일을 사용한다.

[user]
name = EjongHyuck
email = ejonghyuck@live.co.kr

커밋시에는 user 정보가 필수적으로 필요하며, 모든 커밋에는 author에 대한 정보가 기록된다. 다만 name, email의 경우 이 정보가 맞는 정보인지 확인하는 단계가 존재하지 않는다. 그래서 이곳에 아무 정보나 적는다고 하더라도 상관이 없다. 보통은 이 정보를 자기 자신의 정보를 입력하기 때문에 크게 신경쓰진 않지만, Enterprise-Level에선 어떤 사람이 실제로 커밋을 했는지 보증하는 단계가 없기 때문에 껄끄러운 일이 분명하다. 하지만 GPG 서명을 통해 어떤 사람이 이 커밋을 올렸는지 명확하게 확인할 수 있다면 관리자도, 개발자도 안심하고 저장소를 관리할 수 있을 것이다.


OS X에서 GPG 서명 만들기

OS X 에는 homebrew라는 훌륭한 패키지 관리자가 존재한다. homebrew를 이용하면 손쉽게 GPG 모듈 설치가 가능하다. (homebrew가 없다면 이곳에서 설치하자.)

$ brew install gpg

GPG 키 생성은 다음 명령어를 실행하여 생성할 수 있다.

$ gpg --gen-key 

그 다음에는 원하는 것을 고르라고 하는데, enter를 눌러서 default인 RSA and RSA를 선택하자.

key size를 입력하라고 하는 화면에서는 GitHub에선 4096을 권장하고 있기 때문에 4096을 입력하면 된다.

키의 유효 기간은 그냥 enter를 눌러서 default로 맞춰주자. 그 다음 name, email을 설정하고 자신이 입력한 것들이 맞는지 체크를 하면 GPG 키가 생성된다.

GPG 서명 키 확인

키를 생성했으니 키를 확인해보자. 다음 명령어를 입력하면 키 리스트를 확인할 수 있다.

$ gpg --list-keys
/Users/EjongHyuck/.gnupg/pubring.gpg
------------------------------------
pub 4096R/A8F99211 2016-04-05
uid EjongHyuck
sub 4096R/Z832QR89 2016-04-05

여기서 A8F99211 라는 8개의 글자가 GPG 키의 ID이다. 이 부분은 중요하기 때문에 클립보드에 복사해놓는다. GPG 키를 확인하기 위해선 저 8글자가 필요하다.

$ gpg --armor --export A8F99211
# Prints the GPG key, in ASCII armor format

위 명령어를 통해 GPG 키를 확인할 수 있다. 이 키는 GitHub 계정에 등록해야 서명으로 사용할 수 있으며 키 내용이 유출되지 않는 이상 다른 사람이 서명된 커밋을 올릴 수 없을 것이다.

GitHub에 GPG 서명 키 등록하기

GitHub에 로그인 한 다음, 프로필을 눌러보면 Settings가 있다. 설정 페이지로 넘어가자.

좌측 메뉴에 SSH and GPG keys라는 메뉴가 존재한다. 이곳에서 GPG 키를 관리할 수 있다.

위에서 확인한 GPG 키를 이곳에 붙여 넣어준 다음, Add GPG Key를 눌러서 GPG 키를 등록한다. 중요한 것은 GPG키를 등록할 때 키 내용에 BEGIN PGP PUBLIC KEY BLOCK 블럭과 END PGP PUBLIC KEY BLOCK 블럭이 모두 포함되어 있어야 한다. 나같은 경우 이 내용을 몰라서 10분간 뻘짓을 했으니 주의하자.

Git에서 서명된 커밋 하기

이제 Git에서 설정을 건드릴 차례이다. 우선 Git에다가 생성된 GPG 키에 대한 정보를 알려줘야 한다.

위에서 GPG 키 정보를 확인하기 위해 필요했던 8자리 글자를 복사한다. 위에선 A8F99211이었다.

글로벌로 설정하려면 다음 명령어를 터미널에 입력한다. 특정 저장소만 설정하고 싶다면 — global 부분을 제거하고 입력하면 된다.

$ git config --global user.signingkey A8F99211

~/.gitconfig에 직접 입력해주어도 된다.

[user]
name = EjongHyuck
email = ejonghyuck@live.co.kr
signingkey = A8F99211

스테이지에 있는 파일들을 커밋할 때에는 -S 플래그를 따로 입력해야 한다.

$ git commit -S -m 'message'

다만 일일이 -S 플래그를 입력하는 것은 꽤나 귀찮은 일이다. 그래서 Git 2.0 버전부터는 이 부분을 따로 설정할 수 있다. 다음 명령어를 입력하면 된다.

$ git config --global commit.gpgsign true

혹은 ~/.gitconfig에 직접 입력해주어도 된다.

[commit]
gpgsign = true

커밋을 하고 푸쉬를 하면 위와 같이 GitHub에서 해당 커밋이 서명된 커밋임을 확인할 수 있으며 author에 대한 정보 또한 확인할 수 있다.