GPG로 커밋에 서명하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, 자체 호스팅, GitLab Dedicated

GitLab 리포지토리에서 만든 커밋에 GPG (GNU Privacy Guard) 키로 서명할 수 있습니다.

:::Note GitLab은 모든 OpenPGP, PGP 및 관련 자료 및 구현에 대해 GPG 용어를 사용합니다. :::

GitLab이 커밋을 확인하려면:

  • 커미터는 GPG 공개/개인 키 쌍을 가져야 합니다.
  • 커미터의 공개 키가 GitLab 계정에 업로드되어 있어야 합니다.
  • GPG 공개 키에 있는 이메일 주소 중 하나가 GitLab에서 커미터가 사용하는 검증된 이메일 주소와 일치해야 합니다. 이 주소를 비공개로 유지하려면 프로필에서 GitLab이 제공하는 자동 생성된 비공개 커밋 이메일 주소를 사용하십시오.
  • 커미터의 이메일 주소가 GPG 키에서 검증된 이메일 주소와 일치해야 합니다.

GitLab은 자체 키링을 사용하여 GPG 서명을 확인합니다. GitLab은 공개 키 서버에 액세스하지 않습니다.

GPG 확인된 태그는 지원되지 않습니다.

GPG에 대한 자세한 내용은 관련 주제 목록을 참조하십시오.

사용자의 공개 GPG 키 보기

사용자의 공개 GPG 키를 보려면 다음 중 하나를 사용할 수 있습니다:

  • https://gitlab.example.com/<USERNAME>.gpg로 이동합니다. 사용자가 구성한 경우 GitLab이 GPG 키를 표시하거나 구성되지 않은 사용자의 경우 빈 페이지가 표시됩니다.
  • 사용자 프로필(예: https://gitlab.example.com/<USERNAME>)로 이동합니다. 사용자 프로필의 오른쪽 상단에 공개 GPG 키 보기()를 선택합니다. 이 버튼은 사용자가 키를 구성한 경우에만 표시됩니다.

커밋 서명 구성

커밋에 서명하려면 로컬 머신과 GitLab 계정을 모두 구성해야 합니다:

  1. GPG 키 만들기.
  2. 계정에 GPG 키 추가.
  3. GPG 키를 Git과 연결.
  4. Git 커밋에 서명.

GPG 키 만들기

GPG 키가 없는 경우 다음을 수행하세요:

  1. 이용 중인 운영 체제에 맞게 GPG 설치합니다. 운영 체제에 gpg2가 설치되어 있는 경우 이 페이지의 명령어에서 gpggpg2로 바꿉니다.
  2. 키 쌍을 생성하려면 사용하는 gpg 버전에 적합한 명령을 실행합니다:

    # Windows의 Gpg4win 및 대부분의 macOS 버전을 포함한 기본 GPG 버전에는 이 명령을 사용합니다.
    gpg --gen-key
    
    # 2.1.17 이후의 GPG 버전에는 이 명령을 사용합니다.
    gpg --full-gen-key
    
  3. 사용할 키 알고리즘을 선택하거나 기본 옵션인 RSA and RSA를 선택합니다.
  4. 비트 단위로 키 길이를 선택합니다. GitLab은 4096 비트 키를 권장합니다.
  5. 키의 유효 기간을 지정합니다. 이 값은 주관적이며 기본값은 만료가 없습니다.
  6. 답변을 확인하려면 y를 입력합니다.
  7. 이름을 입력합니다.
  8. 이메일 주소를 입력합니다. GitLab 계정에서 검증된 이메일 주소와 일치해야 합니다.
  9. 선택 사항. 이름 뒤에 괄호로 표시할 주석을 입력합니다.
  10. GPG는 지금까지 입력한 정보를 표시합니다. 정보를 편집하거나 계속하려면 O(Okay)를 누르십시오.
  11. 강력한 암호를 입력하고 확인을 위해 다시 입력합니다.
  12. 다음 명령을 실행하여 개인 GPG 키를 나열합니다. 이때 <EMAIL>을 키를 생성할 때 사용한 이메일 주소로 바꿉니다:

    gpg --list-secret-keys --keyid-format LONG <EMAIL>
    
  13. 출력에서 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]
    
  14. 연결된 공개 키를 표시하려면 이 명령을 실행하고 이전 단계의 GPG 키 ID로 바꿉니다:

    gpg --armor --export <ID>
    
  15. 다음 단계에 필요한 BEGIN PGP PUBLIC KEY BLOCKEND PGP PUBLIC KEY BLOCK 라인을 포함하여 공개 키를 복사합니다.

GPG 키를 계정에 추가하기

사용자 설정에 GPG 키를 추가하려면 다음을 수행하세요:

  1. GitLab에 로그인합니다.
  2. 왼쪽 사이드바에서 아바타를 선택합니다.
  3. 프로필 편집을 선택합니다.
  4. GPG 키 ()를 선택합니다.
  5. 새 키 추가를 선택합니다.
  6. 란에 사용자의 공개 키를 붙여넣습니다.
  7. 키를 계정에 추가하려면 키 추가를 선택합니다. GitLab은 키의 지문, 이메일 주소 및 작성 날짜를 표시합니다:

    GPG 키 단일 페이지

키를 추가한 후에는 편집할 수 없습니다. 대신 문제가 되는 키를 제거한 후 다시 추가하십시오.

GPG 키를 Git과 연결하기

GPG 키를 생성한 후 계정에 추가하면 이 키를 사용하도록 Git을 구성해야 합니다:

  1. 방금 생성한 개인 GPG 키 목록을 확인하려면 다음 명령을 실행하십시오. 이때 <EMAIL>을 키에 대한 이메일 주소로 바꿉니다:

    gpg --list-secret-keys --keyid-format LONG <EMAIL>
    
  2. 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]
    
  3. 커밋에 이 키로 서명하도록 Git을 구성하려면 다음 명령을 실행하여 <KEY ID>를 GPG 키 ID로 바꿉니다:

    git config --global user.signingkey <KEY ID>
    

Git 커밋에 서명하기

GPG 키를 계정에 추가한 후 개별 커밋에 수동으로 서명하거나 Git을 기본적으로 서명하도록 구성할 수 있습니다:

  • 개별 Git 커밋에 수동으로 서명하기:
    1. 서명하려는 모든 커밋에 -S 플래그를 추가합니다:

      git commit -S -m "나의 커밋 메시지"
      
    2. 요청 시 GPG 키의 암호를 입력합니다.
    3. GitLab에 푸시하고 확인하세요. 커밋이 검증되었는지 확인합니다.
  • 다음 명령을 실행하여 Git이 기본적으로 모든 커밋에 서명하도록 설정합니다:

    git config --global commit.gpgsign true
    

서명 키 조건부 설정

작업 및 개인용 등 서로 다른 목적을 위해 서명 키를 유지하는 경우 .gitconfig 파일에 IncludeIf 문을 사용하여 어떤 키로 커밋을 서명할지 설정합니다.

전제 조건:

  • Git 버전 2.13 이상이 필요합니다.
  1. 기본 ~/.gitconfig 파일과 같은 디렉토리에 .gitconfig-gitlab과 같은 두 번째 파일을 생성합니다.
  2. 기본 ~/.gitconfig 파일에, GitLab 프로젝트가 아닌 작업용으로 Git 설정을 추가합니다.
  3. 기본 ~/.gitconfig 파일 끝에 다음 정보를 추가합니다:

    # 이 파일의 내용은 GitLab.com URL에 대해서만 포함됩니다
    [includeIf "hasconfig:remote.*.url:https://gitlab.com/**"]
    
    # 대체 구성 파일을 가리킬 수 있도록 이 행을 편집합니다
    path = ~/.gitconfig-gitlab
    
  4. 대체 .gitconfig-gitlab 파일에, GitLab 저장소에 커밋하는 경우에만 사용할 설정을 추가합니다. 이 경우, 기본 ~/.gitconfig 파일의 모든 설정은 명시적으로 재정의하지 않는 한 유지됩니다. 다음 예에서는,

    # 대체 ~/.gitconfig-gitlab 파일
    # 이 값들은 'gitlab.com' 문자열과 일치하는 리포지토리에서 사용되며, ~/.gitconfig 파일의 해당 값들을 재정의합니다
    
    [user]
    email = you@example.com
    signingkey = <KEY ID>
    
    [commit]
    gpgsign = true
    

GPG 키 취소하기

GPG 키가 손상된 경우 해당 키를 취소합니다. 키를 취소하면 미래 및 과거 커밋이 변경됩니다:

  • 이 키로 서명된 과거 커밋은 확인되지 않은 것으로 표시됩니다.
  • 이 키로 서명된 미래 커밋은 확인되지 않은 것으로 표시됩니다.

GPG 키를 취소하려면 다음을 수행하세요:

  1. 왼쪽 사이드바에서 아바타를 선택합니다.
  2. 프로필 편집을 선택합니다.
  3. GPG 키 ()를 선택합니다.
  4. 삭제하려는 GPG 키 옆에 취소를 선택합니다.

GPG 키 제거

GitLab 계정에서 GPG 키를 제거할 때:

  • 해당 키로 이전에 서명된 커밋은 여전히 검증됩니다.
  • 해당 키를 사용하려는 향후 커밋(아직 푸시되지 않은 커밋을 포함)은 검증되지 않습니다.

계정에서 GPG 키를 제거하려면:

  1. 왼쪽 사이드바에서 아바타를 선택합니다.
  2. 프로필 편집을 선택합니다.
  3. GPG 키 ()를 선택합니다.
  4. 삭제하려는 GPG 키 옆의 제거 ()를 선택합니다.

향후 및 과거 커밋을 모두 검증 해제해야 하는 경우, 대신 관련된 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

암호 입력 프롬프트가 표시되지 않는 경우, 셸의 rc 파일(일반적으로 ~/.bashrc 또는 ~/.zshrc)에 export GPG_TTY=$(tty)를 추가하고 터미널을 다시 시작하십시오.