GPG로 커밋 서명

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

당신은 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 키를 표시하고, 구성하지 않은 사용자의 경우 공백 페이지가 표시됩니다.
  • 사용자 프로필(예: https://gitlab.example.com/<USERNAME>)로 이동합니다. 사용자 프로필의 우측 상단에서 View public GPG keys ()를 선택합니다. 이 버튼은 사용자가 키를 구성한 경우에만 표시됩니다.

커밋 서명 구성

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

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

GPG 키 생성

GPG 키가 없는 경우 다음을 수행하십시오:

  1. 운영 체제에 GPG 설치합니다. 당신의 운영 체제에 gpg2가 설치되어 있는 경우, 이 페이지의 명령을 사용하여 gpg 대신 gpg2를 대체하십시오.
  2. 키 쌍을 생성하려면 gpg 버전에 맞는 명령을 실행하십시오:

    # 기본 GPG 버전(Windows의 Gpg4win 및 macOS의 대부분)에 대한 이 명령을 사용하십시오:
    gpg --gen-key
       
    # 2.1.17 이상의 GPG 버전에 대한 이 명령을 사용하십시오:
    gpg --full-gen-key
    
  3. 키가 사용할 알고리즘을 선택하거나 기본 옵션인 RSA와 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 key single page

키를 추가한 후에는 수정할 수 없습니다. 그 대신 잘못된 키를 제거하고 다시 추가하십시오.

GPG 키를 Git과 연결

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

  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이 커밋을 당신의 키로 서명하도록 구성하십시오. 이때 <KEY 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-gitlab 파일에는 GitLab 리포지터리에 커밋할 때 사용할 구성 재정의를 추가합니다. 주 ~/.gitconfig 파일의 모든 설정은 명시적으로 재정의하지 않는 한 유지됩니다. 다음 예에서는,

    # 대체 ~/.gitconfig-gitlab 파일
    # 'gitlab.com' 문자열과 일치하는 리포지터리에 사용되는 값들로 ~/.gitconfig 내 해당 값들을 대체합니다
       
    [user]
    email = you@example.com
    signingkey = <키 ID>
       
    [commit]
    gpgsign = true
    

GPG 키 취소

GPG 키를 무효화하려면. GPG 키의 무효화는 미래 및 과거 커밋 모두에 영향을 줍니다:

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

GPG 키를 무효화하려면:

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

GPG 키 제거

GitLab 계정에서 GPG 키를 삭제하면:

  • 이 키로 서명된 이전 커밋은 확인됨 상태로 유지됩니다.
  • 이 키를 사용하도록 시도하는 미래 커밋(아직 푸시되지 않은 커밋 포함)은 확인되지 않습니다.

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

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

미래와 과거 커밋을 모두 미확인 상태로 변경해야 하는 경우, 연관된 GPG 키를 무효화하십시오.

관련 주제

문제 해결

시크릿 키를 사용할 수 없음

시크릿 키를 사용할 수 없음 또는 gpg: 서명 실패: 시크릿 키를 사용할 수 없음 오류를 받았다면 gpg 대신 gpg2를 사용해 보십시오:

git config --global gpg.program gpg2

만약 GPG 키가 암호로 보호되어 있으며 암호 입력 프롬프트가 나타나지 않는다면, 쉘의 rc 파일(일반적으로 ~/.bashrc 또는 ~/.zshrc)에 export GPG_TTY=$(tty)를 추가하십시오.

GPG가 데이터에 대해 서명하는 데 실패했습니다

GPG 키가 암호로 보호되어 있고 다음 오류 메시지를 받았다면:

error: gpg가 데이터에 대해 서명하는 데 실패했습니다
fatal: 커밋 객체 쓰기 실패

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