GPG로 커밋 및 태그 서명
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GPG(GNU Privacy Guard) 키로 GitLab 저장소에서 만드는 커밋에 서명할 수 있습니다. GitLab은 모든 OpenPGP, PGP, GPG 관련 자료 및 구현에 GPG라는 용어를 사용합니다. GitLab이 커밋을 검증된 것으로 간주하려면:
GPG(GNU Privacy Guard) 키로 GitLab 저장소에서 만드는 커밋에 서명할 수 있습니다.
GitLab은 모든 OpenPGP, PGP, GPG 관련 자료 및 구현에 GPG라는 용어를 사용합니다.
GitLab이 커밋을 검증된 것으로 간주하려면:
- 커미터에게 GPG 공개/개인 키 쌍이 있어야 합니다.
- 커미터의 공개 키가 GitLab 계정에 업로드되어 있어야 합니다.
- GPG 공개 키의 이메일 주소 중 하나가 GitLab에서 커미터가 사용하는 확인된 이메일 주소와 일치해야 합니다. 이 주소를 비공개로 유지하려면 GitLab이 프로필에서 제공하는 자동 생성된 비공개 커밋 이메일 주소를 사용합니다.
- 커미터의 이메일 주소가 GPG 키의 확인된 이메일 주소와 일치해야 합니다.
GitLab은 자체 키링을 사용하여 GPG 서명을 확인합니다. 공개 키 서버에 액세스하지 않습니다.
GPG에 대한 자세한 내용은 관련 주제 목록을 참조하세요.
사용자의 공개 GPG 키 보기#
사용자의 공개 GPG 키를 보려면 다음 중 하나를 수행합니다:
https://gitlab.example.com/.gpg로 이동합니다. 사용자가 GPG 키를 구성한 경우 GitLab은 GPG 키를 표시하고, GPG 키가 구성되지 않은 사용자의 경우 빈 페이지를 표시합니다.- 사용자의 프로필(예:
https://gitlab.example.com/)로 이동합니다. 사용자 프로필의 오른쪽 상단에서 View public GPG keys([key])를 선택합니다. 이 버튼은 사용자가 키를 구성한 경우에만 표시됩니다.
커밋 서명 구성#
커밋에 서명하려면 로컬 시스템과 GitLab 계정을 모두 구성해야 합니다:
GPG 키 만들기#
GPG 키가 아직 없으면 만듭니다:
-
운영 체제에 맞게 GPG를 설치합니다. 운영 체제에
gpg2가 설치되어 있으면 이 페이지의 명령에서gpg를gpg2로 교체합니다. -
키 쌍을 생성하려면
gpg버전에 맞는 명령을 실행합니다:# 기본 버전의 GPG, Windows의 Gpg4win, # 대부분의 macOS 버전을 포함한 기본 버전에 이 명령을 사용합니다: gpg --gen-key # GPG 2.1.17 이후 버전에 이 명령을 사용합니다: gpg --full-gen-key -
키가 사용해야 하는 알고리즘을 선택하거나 Enter를 눌러 기본 옵션인
RSA and RSA를 선택합니다. -
키 길이를 비트 단위로 선택합니다. GitLab은 4096비트 키를 권장합니다.
-
키의 유효 기간을 지정합니다. 이 값은 주관적이며 기본값은 만료 없음입니다.
-
답변을 확인하려면
y를 입력합니다. -
이름을 입력합니다.
-
이메일 주소를 입력합니다. GitLab 계정의 확인된 이메일 주소와 일치해야 합니다.
-
선택 사항. 이름 뒤에 괄호 안에 표시할 코멘트를 입력합니다.
-
GPG는 지금까지 입력한 정보를 표시합니다. 정보를 편집하거나 O(영문
Okay의 O)를 눌러 계속합니다. -
강력한 비밀번호를 입력한 다음 다시 입력하여 확인합니다.
-
개인 GPG 키를 나열하려면
을 키를 생성할 때 사용한 이메일 주소로 교체하여 다음 명령을 실행합니다:gpg --list-secret-keys --keyid-format LONG -
출력에서
sec줄을 식별하고 GPG 키 ID를 복사합니다./문자 뒤에 시작합니다. 이 예시에서 키 ID는30F2B65B9246B6CA입니다:sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA uid [ultimate] Mr. Robot <your_email> ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E] -
관련 공개 키를 표시하려면
를 이전 단계의 GPG 키 ID로 교체하여 다음 명령을 실행합니다:gpg --armor --export -
BEGIN PGP PUBLIC KEY BLOCK및END PGP PUBLIC KEY BLOCK줄을 포함한 공개 키를 복사합니다. 다음 단계에서 이 키가 필요합니다.
계정에 GPG 키 추가#
사용자 설정에 GPG 키를 추가하려면:
- GitLab에 로그인합니다.
- 오른쪽 상단에서 아바타를 선택합니다.
- Edit profile을 선택합니다.
- 왼쪽 사이드바에서 Access > GPG keys를 선택합니다.
- Add new key를 선택합니다.
- Key에 공개 키를 붙여넣습니다.
- 계정에 키를 추가하려면 Add key를 선택합니다.
GitLab은 키의 지문, 이메일 주소, 생성 날짜를 표시합니다.
키를 추가한 후에는 편집할 수 없습니다. 대신 문제가 있는 키를 제거하고 다시 추가합니다.
GPG 키를 Git과 연결#
GPG 키를 만든 후 계정에 추가한 후에는 이 키를 사용하도록 Git을 구성해야 합니다:
-
이 명령을 실행하여 방금 만든 개인 GPG 키를 나열하며
을 키의 이메일 주소로 교체합니다:gpg --list-secret-keys --keyid-format LONG -
sec로 시작하는 GPG 개인 키 ID를 복사합니다. 이 예시에서 개인 키 ID는30F2B65B9246B6CA입니다:sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA uid [ultimate] Mr. Robot <your_email> ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E] -
를 GPG 키 ID로 교체하여 커밋에 키로 서명하도록 Git을 구성합니다:git config --global user.signingkey
Git 커밋 서명#
계정에 공개 키를 추가한 후 개별 커밋에 수동으로 서명하거나 Git이 기본적으로 서명된 커밋을 사용하도록 구성할 수 있습니다:
-
개별 Git 커밋에 수동으로 서명하려면:
-
서명하려는 커밋에
-S플래그를 추가합니다:git commit -S -m "My commit message" -
요청받으면 GPG 키의 비밀번호를 입력합니다.
-
GitLab에 푸시하고 커밋이 검증되었는지 확인합니다.
-
-
기본적으로 모든 Git 커밋에 서명하려면 이 명령을 실행합니다:
git config --global commit.gpgsign true
조건부로 서명 키 설정#
업무와 개인 용도와 같이 별도의 목적으로 서명 키를 유지하는 경우
.gitconfig 파일의 IncludeIf 구문을 사용하여 커밋에 서명할 키를 설정합니다.
전제 조건:
- Git 버전 2.13 이상이 필요합니다.
-
기본
~/.gitconfig파일과 동일한 디렉토리에 두 번째 파일(예:.gitconfig-gitlab)을 만듭니다. -
기본
~/.gitconfig파일에 비GitLab 프로젝트 작업을 위한 Git 설정을 추가합니다. -
기본
~/.gitconfig파일 끝에 다음 정보를 추가합니다:# 이 파일의 내용은 GitLab.com URL에만 포함됩니다 [includeIf "hasconfig:remote.*.url:https://gitlab.com/**"] # 이 줄을 편집하여 대체 구성 파일을 가리킵니다 path = ~/.gitconfig-gitlab -
대체
.gitconfig-gitlab파일에 GitLab 저장소에 커밋할 때 사용할 구성 재정의를 추가합니다. 기본~/.gitconfig파일의 모든 설정은 명시적으로 재정의하지 않는 한 유지됩니다. 이 예시에서:# 대체 ~/.gitconfig-gitlab 파일 # 이 값은 'gitlab.com' 문자열과 일치하는 저장소에 사용됩니다, # 그리고 ~/.gitconfig의 해당 값을 재정의합니다 [user] email = you@example.com signingkey = [commit] gpgsign = true
태그 서명 및 검증#
히스토리
- GitLab 18.3에서
render_gpg_signed_tags_verification_status라는 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다. - GitLab 19.0에서 GitLab.com, GitLab Self-Managed, GitLab Dedicated에서 활성화되었습니다.
GPG 키를 Git과 연결한 후 태그에 서명할 수 있습니다:
-
Git 태그를 만들 때
-s플래그를 추가합니다:git tag -s v1.1.1 -m "My signed tag" -
태그를 GitLab에 푸시합니다.
-
로컬에서 서명을 검증하려면 다음을 실행합니다:
git tag --verify v1.1.1 -
선택 사항. 모든 태그를 자동으로 서명하려면 다음을 실행합니다:
git config --global tag.gpgsign true
GPG 키 취소#
GPG 키가 손상되면 취소합니다. 키를 취소하면 과거와 미래 커밋이 모두 변경됩니다:
- 이 키로 서명된 과거 커밋은 미검증으로 표시됩니다.
- 이 키로 서명된 미래 커밋은 미검증으로 표시됩니다.
GPG 키를 취소하려면:
- 오른쪽 상단에서 아바타를 선택합니다.
- Edit profile을 선택합니다.
- 왼쪽 사이드바에서 Access > GPG keys를 선택합니다.
- 삭제할 GPG 키 옆에 Revoke를 선택합니다.
GPG 키 제거#
GitLab 계정에서 GPG 키를 제거하면:
- 이 키로 서명된 이전 커밋은 검증된 상태로 유지됩니다.
- 이 키를 사용하려는 미래 커밋(만들었지만 아직 푸시하지 않은 커밋 포함)은 미검증 상태가 됩니다.
계정에서 GPG 키를 제거하려면:
- 오른쪽 상단에서 아바타를 선택합니다.
- Edit profile을 선택합니다.
- 왼쪽 사이드바에서 Access > GPG keys를 선택합니다.
- 삭제할 GPG 키 옆에 Remove([remove])를 선택합니다.
미래와 과거 커밋 모두 미검증으로 만들어야 하면 대신 관련 GPG 키를 취소합니다.
관련 주제#
- 웹 UI에서 만들어진 커밋에 대한 커밋 서명 구성
- GPG 리소스:
트러블슈팅#
비밀 키를 사용할 수 없음#
secret key not available 또는 gpg: signing failed: secret key not available 오류가 발생하면 gpg 대신 gpg2를 사용해 보세요:
git config --global gpg.program gpg2
GPG 키가 비밀번호로 보호되어 있고 비밀번호 입력 프롬프트가 표시되지 않으면
쉘의 rc 파일(일반적으로 ~/.bashrc 또는 ~/.zshrc)에 export GPG_TTY=$(tty)를 추가합니다.
GPG가 데이터 서명에 실패#
GPG 키가 비밀번호로 보호되어 있고 다음 오류 중 하나가 발생하는 경우:
error: gpg failed to sign the data
fatal: failed to write commit object
gpg: signing failed: Inappropriate ioctl for device
비밀번호 입력 프롬프트가 표시되지 않으면:
-
텍스트 편집기에서 쉘의 구성 파일(일반적으로
~/.bashrc또는~/.zshrc)을 엽니다. -
파일에 다음 줄을 추가합니다:
export GPG_TTY=$(tty) -
파일을 저장하고 텍스트 편집기를 닫습니다.
-
변경 사항을 적용합니다. 다음 중 하나를 선택합니다:
- 터미널을 재시작합니다.
source ~/.bashrc또는source ~/.zshrc를 실행합니다.
정확한 단계는 운영 체제와 쉘 구성에 따라 다를 수 있습니다.
