GPG로 커밋에 서명하기

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

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

::이미지프로필 설정 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가 설치되어 있는 경우, 이 페이지의 명령을 gpg2로 바꿉니다.
  2. 키 쌍을 생성하려면 사용 중인 gpg 버전에 적합한 명령을 실행합니다.

    # 기본 GPG 버전(Windows의 Gpg4win, 대부분의 macOS 버전 포함)에 대한 명령:
    gpg --gen-key
       
    # 2.1.17 이후 버전의 GPG에 대한 명령:
    gpg --full-gen-key
    
  3. 사용할 키의 알고리즘을 선택하거나 기본 옵션인 RSA and RSA를 선택하려면 Enter를 누릅니다.
  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 키를 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이 이 키로 커밋에 서명하도록 구성하십시오. 여기서 <키 ID>는 GPG 키 ID로 대체합니다:

    git config --global user.signingkey <키 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-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)를 추가하고 터미널을 다시 시작하세요.