GPG로 커밋에 서명하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

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

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

GitLab이 커밋을 검증하려면:

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

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

GPG 서명된 태그는 지원되지 않습니다.

GPG에 대한 자세한 내용은 #관련-주제를 참고하세요.

사용자의 공개 GPG 키보기

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

  • https://gitlab.example.com/<USERNAME>.gpg로 이동합니다. 사용자가 설정한 경우 GitLab은 GPG 키를 표시하고, 설정된 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 --gen-key
    
    # 2.1.17 이후 버전의 GPG에 대해 사용합니다:
    gpg --full-gen-key
    
  3. 키가 사용할 알고리즘을 선택하거나 Enter를 눌러 기본 옵션인 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는 / 문자 다음에 시작합니다. 여기서 키 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 key single page

한 번 키를 추가하면 편집할 수 없습니다. 대신에 문제의 있는 키를 삭제하고 다시 추가하십시오.

GPG 키를 Git과 연결

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

  1. 방금 생성한 개인 GPG 키를 나열하려면 다음 명령어를 실행합니다. 키의 이메일 주소를 입력합니다:

    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을 구성하려면 다음 명령어를 실행합니다. GPG 키 ID를 GPG 키 ID로 바꿉니다:

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

Git 커밋에 서명하기

계정에 공개 키를 추가한 후 개별 커밋을 수동으로 서명하거나 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-gitlap 파일에 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 키를 폐기하세요.

관련 주제

문제 해결

비밀 키를 사용할 수 없음

비밀 키를 사용할 수 없음 또는 gpg: signing failed: secret key not available 오류를 받는 경우, gpg 대신 gpg2를 사용해 보세요:

git config --global gpg.program gpg2

GPG 키에 비밀번호가 설정되어 있고 비밀번호 입력 프롬프트가 나타나지 않는 경우, export GPG_TTY=$(tty)을 쉘의 rc 파일(일반적으로 ~/.bashrc 또는 ~/.zshrc)에 추가하세요.

GPG가 데이터에 서명하지 못함

GPG 키에 비밀번호가 설정되어 있고 다음 오류를 받는 경우: shell error: gpg failed to sign the data fatal: failed to write commit object

비밀번호 입력 프롬프트가 나타나지 않는 경우 쉘의 rc 파일(일반적으로 ~/.bashrc 또는 ~/.zshrc)에 export GPG_TTY=$(tty)을 추가하고 터미널을 다시 시작하세요.