# 서명 키에 대해 Git에 알리기

로컬로 커밋에 서명하려면 사용하려는 GPG, SSH 또는 X.509 키가 있음을 Git에 알려야 합니다.

## GPG 키에 대해 Git에 알리기

<div class="ghd-tool mac">

GitHub.com에서 커밋 주체 ID 및 계정과 연결된 확인된 이메일 주소와 일치하는 GPG 키를 사용하는 경우 커밋 서명 및 태그 서명을 시작할 수 있습니다.

> \[!NOTE]
> 커밋자 ID와 일치하는 GPG 키가 없는 경우 메일을 기존 키와 연결해야 합니다. 자세한 내용은 [GPG 키와 메일 연결](/ko/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key)을(를) 참조하세요.

여러 GPG 키가 있는 경우 사용할 GPG 키를 Git에 알려야 합니다.

1. <span class="platform-mac">터미널</span><span class="platform-linux">터미널</span><span class="platform-windows">Git Bash</span>를 엽니다.

2. 이전에 `--gpg-sign`(으)로 서명할 때 다른 키 형식을 사용하도록 Git을 구성한 경우, 이 구성을 설정 해제하면 기본 형식인 `openpgp`이(가) 사용됩니다.

   ```shell
   git config --global --unset gpg.format
   ```

3. `gpg --list-secret-keys --keyid-format=long` 명령을 사용하여 퍼블릭 키와 프라이빗 키가 모두 있는 긴 형식의 GPG 키를 나열합니다. 커밋 또는 태그에 서명하려면 프라이빗 키가 필요합니다.

   ```shell copy
   gpg --list-secret-keys --keyid-format=long
   ```

   > \[!NOTE]
   > Linux에서 일부 GPG를 설치하려면 기존 키 목록을 대신 보는 데 `gpg2 --list-keys --keyid-format LONG`을 사용해야 할 수 있습니다. 이 경우 `git config --global gpg.program gpg2`를 실행하여 `gpg2`를 사용할 Git도 구성해야 합니다.

4. GPG 키 목록에서 사용할 GPG 키 ID의 긴 형식을 복사합니다. 이 예제에서 GPG 키 ID는 `3AA5C34371567BD2`입니다.

   ```shell copy
   $ gpg --list-secret-keys --keyid-format=long
   /Users/hubot/.gnupg/secring.gpg
   ------------------------------------
   sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
   uid                          Hubot <hubot@example.com>
   ssb   4096R/4BB6D45482678BE3 2016-03-10
   ```

5. Git에서 기본 GPG 서명 키를 설정하려면 아래 텍스트를 붙여넣고 사용하려는 GPG 기본 키 ID로 대체합니다. 이 예제에서 GPG 키 ID는 `3AA5C34371567BD2`입니다.

   ```shell
   git config --global user.signingkey 3AA5C34371567BD2
   ```

   또는 하위 키를 사용할 수 있습니다. 이 예제에서 GPG 하위 키 ID는 `4BB6D45482678BE3`입니다.

   ```shell
   git config --global user.signingkey 4BB6D45482678BE3
   ```

   여러 키와 하위 키를 사용하는 경우 키에 느낌표 `!`를 추가하여 Git에게 이것이 선호하는 키임을 알려야 합니다. 경우에 따라 백슬래시 `\!`로 느낌표를 이스케이프해야 할 수 있습니다.

6. 필요에 따라 기본적으로 모든 커밋과 태그에 서명하도록 Git을 구성하려면 다음 명령을 입력합니다.

   ```shell
   git config --global commit.gpgsign true
   git config --global tag.gpgSign true
   ```

   자세한 내용은 [커밋 서명](/ko/authentication/managing-commit-signature-verification/signing-commits)을(를) 참조하세요.

7. GPG 도구 모음을 사용하지 않는 경우 `zsh` 셸에서 다음 명령을 실행하여 `.zshrc`파일(있는 경우)에 또는 `.zprofile` 파일에 GPG 키를 추가합니다.

   ```shell
   $ if [ -r ~/.zshrc ]; then echo -e '\nexport GPG_TTY=$(tty)' >> ~/.zshrc; \
     else echo -e '\nexport GPG_TTY=$(tty)' >> ~/.zprofile; fi
   ```

   또는 `bash` 셸을 사용하는 경우 다음 명령을 실행합니다.

   ```shell
   $ if [ -r ~/.bash_profile ]; then echo -e '\nexport GPG_TTY=$(tty)' >> ~/.bash_profile; \
     else echo -e '\nexport GPG_TTY=$(tty)' >> ~/.profile; fi
   ```

8. 필요에 따라 필요한 경우 PIN 또는 암호를 입력하라는 메시지를 표시하려면 `pinentry-mac`을 설치합니다. 예를 들어 [Homebrew](https://brew.sh/) 사용하여 다음을 수행합니다.

   ```shell
   brew install pinentry-mac
   echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
   killall gpg-agent
   ```

</div>

<div class="ghd-tool windows">

GitHub.com에서 커밋 주체 ID 및 계정과 연결된 확인된 이메일 주소와 일치하는 GPG 키를 사용하는 경우 커밋 서명 및 태그 서명을 시작할 수 있습니다.

> \[!NOTE]
> 커밋자 ID와 일치하는 GPG 키가 없는 경우 메일을 기존 키와 연결해야 합니다. 자세한 내용은 [GPG 키와 메일 연결](/ko/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key)을(를) 참조하세요.

여러 GPG 키가 있는 경우 사용할 GPG 키를 Git에 알려야 합니다.

1. <span class="platform-mac">터미널</span><span class="platform-linux">터미널</span><span class="platform-windows">Git Bash</span>를 엽니다.
2. 이전에 `--gpg-sign`(으)로 서명할 때 다른 키 형식을 사용하도록 Git을 구성한 경우, 이 구성을 설정 해제하면 기본 형식인 `openpgp`이(가) 사용됩니다.

   ```shell
   git config --global --unset gpg.format
   ```
3. `gpg --list-secret-keys --keyid-format=long` 명령을 사용하여 퍼블릭 키와 프라이빗 키가 모두 있는 긴 형식의 GPG 키를 나열합니다. 커밋 또는 태그에 서명하려면 프라이빗 키가 필요합니다.

   ```shell copy
   gpg --list-secret-keys --keyid-format=long
   ```

   > \[!NOTE]
   > Linux에서 일부 GPG를 설치하려면 기존 키 목록을 대신 보는 데 `gpg2 --list-keys --keyid-format LONG`을 사용해야 할 수 있습니다. 이 경우 `git config --global gpg.program gpg2`를 실행하여 `gpg2`를 사용할 Git도 구성해야 합니다.
4. GPG 키 목록에서 사용할 GPG 키 ID의 긴 형식을 복사합니다. 이 예제에서 GPG 키 ID는 `3AA5C34371567BD2`입니다.

   ```shell copy
   $ gpg --list-secret-keys --keyid-format=long
   /Users/hubot/.gnupg/secring.gpg
   ------------------------------------
   sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
   uid                          Hubot <hubot@example.com>
   ssb   4096R/4BB6D45482678BE3 2016-03-10
   ```
5. Git에서 기본 GPG 서명 키를 설정하려면 아래 텍스트를 붙여넣고 사용하려는 GPG 기본 키 ID로 대체합니다. 이 예제에서 GPG 키 ID는 `3AA5C34371567BD2`입니다.

   ```shell
   git config --global user.signingkey 3AA5C34371567BD2
   ```

   또는 하위 키를 사용할 수 있습니다. 이 예제에서 GPG 하위 키 ID는 `4BB6D45482678BE3`입니다.

   ```shell
   git config --global user.signingkey 4BB6D45482678BE3
   ```

   여러 키와 하위 키를 사용하는 경우 키에 느낌표 `!`를 추가하여 Git에게 이것이 선호하는 키임을 알려야 합니다. 경우에 따라 백슬래시 `\!`로 느낌표를 이스케이프해야 할 수 있습니다.
6. 필요에 따라 기본적으로 모든 커밋과 태그에 서명하도록 Git을 구성하려면 다음 명령을 입력합니다.

   ```shell
   git config --global commit.gpgsign true
   git config --global tag.gpgSign true
   ```

   자세한 내용은 [커밋 서명](/ko/authentication/managing-commit-signature-verification/signing-commits)을(를) 참조하세요.

</div>

<div class="ghd-tool linux">

GitHub.com에서 커밋 주체 ID 및 계정과 연결된 확인된 이메일 주소와 일치하는 GPG 키를 사용하는 경우 커밋 서명 및 태그 서명을 시작할 수 있습니다.

> \[!NOTE]
> 커밋자 ID와 일치하는 GPG 키가 없는 경우 메일을 기존 키와 연결해야 합니다. 자세한 내용은 [GPG 키와 메일 연결](/ko/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key)을(를) 참조하세요.

여러 GPG 키가 있는 경우 사용할 GPG 키를 Git에 알려야 합니다.

1. <span class="platform-mac">터미널</span><span class="platform-linux">터미널</span><span class="platform-windows">Git Bash</span>를 엽니다.
2. 이전에 `--gpg-sign`(으)로 서명할 때 다른 키 형식을 사용하도록 Git을 구성한 경우, 이 구성을 설정 해제하면 기본 형식인 `openpgp`이(가) 사용됩니다.

   ```shell
   git config --global --unset gpg.format
   ```
3. `gpg --list-secret-keys --keyid-format=long` 명령을 사용하여 퍼블릭 키와 프라이빗 키가 모두 있는 긴 형식의 GPG 키를 나열합니다. 커밋 또는 태그에 서명하려면 프라이빗 키가 필요합니다.

   ```shell copy
   gpg --list-secret-keys --keyid-format=long
   ```

   > \[!NOTE]
   > Linux에서 일부 GPG를 설치하려면 기존 키 목록을 대신 보는 데 `gpg2 --list-keys --keyid-format LONG`을 사용해야 할 수 있습니다. 이 경우 `git config --global gpg.program gpg2`를 실행하여 `gpg2`를 사용할 Git도 구성해야 합니다.
4. GPG 키 목록에서 사용할 GPG 키 ID의 긴 형식을 복사합니다. 이 예제에서 GPG 키 ID는 `3AA5C34371567BD2`입니다.

   ```shell copy
   $ gpg --list-secret-keys --keyid-format=long
   /Users/hubot/.gnupg/secring.gpg
   ------------------------------------
   sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
   uid                          Hubot <hubot@example.com>
   ssb   4096R/4BB6D45482678BE3 2016-03-10
   ```
5. Git에서 기본 GPG 서명 키를 설정하려면 아래 텍스트를 붙여넣고 사용하려는 GPG 기본 키 ID로 대체합니다. 이 예제에서 GPG 키 ID는 `3AA5C34371567BD2`입니다.

   ```shell
   git config --global user.signingkey 3AA5C34371567BD2
   ```

   또는 하위 키를 사용할 수 있습니다. 이 예제에서 GPG 하위 키 ID는 `4BB6D45482678BE3`입니다.

   ```shell
   git config --global user.signingkey 4BB6D45482678BE3
   ```

   여러 키와 하위 키를 사용하는 경우 키에 느낌표 `!`를 추가하여 Git에게 이것이 선호하는 키임을 알려야 합니다. 경우에 따라 백슬래시 `\!`로 느낌표를 이스케이프해야 할 수 있습니다.
6. 필요에 따라 기본적으로 모든 커밋과 태그에 서명하도록 Git을 구성하려면 다음 명령을 입력합니다.

   ```shell
   git config --global commit.gpgsign true
   git config --global tag.gpgSign true
   ```

   자세한 내용은 [커밋 서명](/ko/authentication/managing-commit-signature-verification/signing-commits)을(를) 참조하세요.
7. `.bashrc` 시작 파일에 GPG 키를 추가하려면 다음 명령을 실행합니다.

   ```bash
   [ -f ~/.bashrc ] && echo -e '\nexport GPG_TTY=$(tty)' >> ~/.bashrc
   ```

</div>

## Git에 SSH 키에 대해 알리기

기존 SSH 키를 사용하여 커밋 및 태그에 서명하거나 서명을 위해 특별히 새 키를 생성할 수 있습니다. 자세한 내용은 [새 SSH 키 생성 및 ssh-agent에 추가](/ko/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)을(를) 참조하세요.

> \[!NOTE]
> SSH 서명 확인은 Git 2.34 이상에서 사용할 수 있습니다. Git 버전을 업데이트하려면 [Git](https://git-scm.com/downloads) 웹 사이트를 참조하세요.

1. <span class="platform-mac">터미널</span><span class="platform-linux">터미널</span><span class="platform-windows">Git Bash</span>를 엽니다.
2. SSH를 사용하여 커밋 및 태그에 서명하도록 Git을 구성합니다.

   ```bash
   git config --global gpg.format ssh
   ```
3. Git에서 SSH 서명 키를 설정하려면 아래 텍스트를 붙여넣고, **/PATH/TO/.SSH/KEY.PUB**를 사용하려는 공개 키의 경로로 대체합니다.

   ```bash
   git config --global user.signingkey /PATH/TO/.SSH/KEY.PUB
   ```

<div class="ghd-tool windows">

## Git에 X.509 키에 대해 알리기

[smimesign](https://github.com/github/smimesign)을 사용하여 S/MIME를 통해 커밋 및 태그에 서명할 수 있습니다.

> \[!NOTE]
> S/MIME 서명 확인은 Git 2.19 이상에서 사용할 수 있습니다. Git 버전을 업데이트하려면 [Git](https://git-scm.com/downloads) 웹 사이트를 참조하세요.

1. [smimesign](https://github.com/github/smimesign#installation)을 설치합니다.

2. <span class="platform-mac">터미널</span><span class="platform-linux">터미널</span><span class="platform-windows">Git Bash</span>를 엽니다.

3. S/MIME을 사용하여 커밋 및 태그에 서명하도록 Git을 구성합니다. Git 2.19 이상에서는 `git config gpg.x509.program` 및 `git config gpg.format` 명령을 사용합니다.
   * S/MIME을 사용하여 모든 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     git config --global gpg.x509.program smimesign
     git config --global gpg.format x509
     ```

   * S/MIME을 사용하여 단일 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     cd PATH-TO-REPOSITORY
     git config --local gpg.x509.program smimesign
     git config --local gpg.format x509
     ```

     Git 2.18 이하 버전에서는 `git config gpg.program` 명령을 사용합니다.

   * S/MIME을 사용하여 모든 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     git config --global gpg.program smimesign
     ```

   * S/MIME을 사용하여 단일 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local gpg.program smimesign
     ```

     커밋한 사람 ID와 일치하는 X.509 키를 사용하는 경우 커밋 및 태그에 서명을 시작할 수 있습니다.

4. 커밋한 사람 ID와 일치하는 X.509 키를 사용하지 않는 경우 `smimesign --list-keys` 명령을 사용하여 인증서와 프라이빗 키가 모두 있는 X.509 키를 나열합니다.

   ```shell
   smimesign --list-keys
   ```

5. X.509 키 목록에서 사용하려는 X.509 키의 인증서 ID를 복사합니다. 이 예제에서 인증서 ID는 `0ff455a2708394633e4bb2f88002e3cd80cbd76f`입니다.

   ```shell
   $ smimesign --list-keys
                ID: 0ff455a2708394633e4bb2f88002e3cd80cbd76f
               S/N: a2dfa7e8c9c4d1616f1009c988bb70f
         Algorithm: SHA256-RSA
          Validity: 2017-11-22 00:00:00 +0000 UTC - 2020-11-22 12:00:00 +0000 UTC
            Issuer: CN=DigiCert SHA2 Assured ID CA,OU=www.digicert.com,O=DigiCert Inc,C=US
           Subject: CN=Octocat,O=GitHub\, Inc.,L=San Francisco,ST=California,C=US
            Emails: octocat@github.com
   ```

6. Git에서 X.509 서명 키를 설정하려면 아래 텍스트를 붙여넣고 이전에 복사한 인증서 ID를 대체합니다.
   * X.509 키를 사용하여 모든 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     git config --global user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

   * X.509 키를 사용하여 단일 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

</div>

<div class="ghd-tool mac">

## Git에 X.509 키에 대해 알리기

[smimesign](https://github.com/github/smimesign)을 사용하여 S/MIME를 통해 커밋 및 태그에 서명할 수 있습니다.

> \[!NOTE]
> S/MIME 서명 확인은 Git 2.19 이상에서 사용할 수 있습니다. Git 버전을 업데이트하려면 [Git](https://git-scm.com/downloads) 웹 사이트를 참조하세요.

1. [smimesign](https://github.com/github/smimesign#installation)을 설치합니다.

2. <span class="platform-mac">터미널</span><span class="platform-linux">터미널</span><span class="platform-windows">Git Bash</span>를 엽니다.

3. S/MIME을 사용하여 커밋 및 태그에 서명하도록 Git을 구성합니다. Git 2.19 이상에서는 `git config gpg.x509.program` 및 `git config gpg.format` 명령을 사용합니다.
   * S/MIME을 사용하여 모든 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     git config --global gpg.x509.program smimesign
     git config --global gpg.format x509
     ```

   * S/MIME을 사용하여 단일 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     cd PATH-TO-REPOSITORY
     git config --local gpg.x509.program smimesign
     git config --local gpg.format x509
     ```

     Git 2.18 이하 버전에서는 `git config gpg.program` 명령을 사용합니다.

   * S/MIME을 사용하여 모든 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     git config --global gpg.program smimesign
     ```

   * S/MIME을 사용하여 단일 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local gpg.program smimesign
     ```

     커밋한 사람 ID와 일치하는 X.509 키를 사용하는 경우 커밋 및 태그에 서명을 시작할 수 있습니다.

4. 커밋한 사람 ID와 일치하는 X.509 키를 사용하지 않는 경우 `smimesign --list-keys` 명령을 사용하여 인증서와 프라이빗 키가 모두 있는 X.509 키를 나열합니다.

   ```shell
   smimesign --list-keys
   ```

5. X.509 키 목록에서 사용하려는 X.509 키의 인증서 ID를 복사합니다. 이 예제에서 인증서 ID는 `0ff455a2708394633e4bb2f88002e3cd80cbd76f`입니다.

   ```shell
   $ smimesign --list-keys
                ID: 0ff455a2708394633e4bb2f88002e3cd80cbd76f
               S/N: a2dfa7e8c9c4d1616f1009c988bb70f
         Algorithm: SHA256-RSA
          Validity: 2017-11-22 00:00:00 +0000 UTC - 2020-11-22 12:00:00 +0000 UTC
            Issuer: CN=DigiCert SHA2 Assured ID CA,OU=www.digicert.com,O=DigiCert Inc,C=US
           Subject: CN=Octocat,O=GitHub\, Inc.,L=San Francisco,ST=California,C=US
            Emails: octocat@github.com
   ```

6. Git에서 X.509 서명 키를 설정하려면 아래 텍스트를 붙여넣고 이전에 복사한 인증서 ID를 대체합니다.
   * X.509 키를 사용하여 모든 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     git config --global user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

   * X.509 키를 사용하여 단일 리포지토리에 서명하려면 다음을 수행합니다.

     ```shell
     cd  PATH-TO-REPOSITORY
     git config --local user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
     ```

</div>

## 추가 참고 자료

* [GitHub 계정에 새 SSH 키 추가](/ko/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).
* [커밋 서명](/ko/authentication/managing-commit-signature-verification/signing-commits)
* [태그 서명](/ko/authentication/managing-commit-signature-verification/signing-tags)