# Git へ署名キーを伝える

ローカルでコミットに署名する場合は、使用したい GPG、SSH、または X.509 キーがあることを Git に知らせる必要があります。

## Git へ GPG キーを伝える

<div class="ghd-tool mac">

コミッター ID と一致する GPG キーと、GitHub.com でのアカウントに関連付けられた確認済みのメール アドレスを使用している場合は、コミットの署名とタグの署名を開始できます。

> \[!NOTE]
> コミッターアイデンティティにマッチする GPG キーを持っていない場合、既存のキーとメールアドレスを関連付ける必要があります。 詳しくは、「[GPG キーとメールの関連付け](/ja/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key)」をご覧ください。

複数の 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 キーを長い形式で一覧表示するには、`gpg --list-secret-keys --keyid-format=long` コマンドを使用します。 コミットやタグに署名するには秘密鍵が必要です。

   ```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
   ```

   詳しくは、「[コミットに署名する](/ja/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">

コミッター ID と一致する GPG キーと、GitHub.com でのアカウントに関連付けられた確認済みのメール アドレスを使用している場合は、コミットの署名とタグの署名を開始できます。

> \[!NOTE]
> コミッターアイデンティティにマッチする GPG キーを持っていない場合、既存のキーとメールアドレスを関連付ける必要があります。 詳しくは、「[GPG キーとメールの関連付け](/ja/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key)」をご覧ください。

複数の 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 キーを長い形式で一覧表示するには、`gpg --list-secret-keys --keyid-format=long` コマンドを使用します。 コミットやタグに署名するには秘密鍵が必要です。

   ```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
   ```

   詳しくは、「[コミットに署名する](/ja/authentication/managing-commit-signature-verification/signing-commits)」をご覧ください。

</div>

<div class="ghd-tool linux">

コミッター ID と一致する GPG キーと、GitHub.com でのアカウントに関連付けられた確認済みのメール アドレスを使用している場合は、コミットの署名とタグの署名を開始できます。

> \[!NOTE]
> コミッターアイデンティティにマッチする GPG キーを持っていない場合、既存のキーとメールアドレスを関連付ける必要があります。 詳しくは、「[GPG キーとメールの関連付け](/ja/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key)」をご覧ください。

複数の 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 キーを長い形式で一覧表示するには、`gpg --list-secret-keys --keyid-format=long` コマンドを使用します。 コミットやタグに署名するには秘密鍵が必要です。

   ```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
   ```

   詳しくは、「[コミットに署名する](/ja/authentication/managing-commit-signature-verification/signing-commits)」をご覧ください。
7. GPG キーを `.bashrc` スタートアップ ファイルに追加するには、次のコマンドを実行します。

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

</div>

## Git に SSH キーについて知らせる

既存の SSH キーを使ってコミットとタグに署名することも、署名専用に新しいキーを生成することもできます。 詳しくは、「[新しい SSH キーを生成して ssh-agent に追加する](/ja/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) の Web サイトを参照してください。

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 キーについて知らせる

S/MIME を使ってコミットをタグに署名するには、[smimesign](https://github.com/github/smimesign) を使います。

> \[!NOTE]
> S/MIME 署名の検証は、Git 2.19 以降で利用できます。 git の最新バージョンを入手するには、[Git](https://git-scm.com/downloads) の Web サイトを参照してください。

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
     ```

   * 1つのリポジトリへの署名に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
     ```

   * 1つのリポジトリへの署名にS/MIMEを使うには以下のようにします。

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

     自分のコミッタアイデンティティにマッチにするX.509キーを使っているなら、コミットやタグへの署名を始められます。

4. コミッター アイデンティティと一致する 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. X.509署名キーをGitに設定するには、証明書IDをさきほどコピーしたものに置き換えて以下のテキストを貼り付けてください。
   * すべてのリポジトリへの署名にX.509キーを使うには以下のようにします。

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

   * 1つのリポジトリへの署名にX.509キーを使うには以下のようにします。

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

</div>

<div class="ghd-tool mac">

## Git にX.509 キーについて知らせる

S/MIME を使ってコミットをタグに署名するには、[smimesign](https://github.com/github/smimesign) を使います。

> \[!NOTE]
> S/MIME 署名の検証は、Git 2.19 以降で利用できます。 git の最新バージョンを入手するには、[Git](https://git-scm.com/downloads) の Web サイトを参照してください。

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
     ```

   * 1つのリポジトリへの署名に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
     ```

   * 1つのリポジトリへの署名にS/MIMEを使うには以下のようにします。

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

     自分のコミッタアイデンティティにマッチにするX.509キーを使っているなら、コミットやタグへの署名を始められます。

4. コミッター アイデンティティと一致する 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. X.509署名キーをGitに設定するには、証明書IDをさきほどコピーしたものに置き換えて以下のテキストを貼り付けてください。
   * すべてのリポジトリへの署名にX.509キーを使うには以下のようにします。

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

   * 1つのリポジトリへの署名にX.509キーを使うには以下のようにします。

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

</div>

## 参考資料

* 「[GitHub アカウントへの新しい SSH キーの追加](/ja/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)」。
* [コミットに署名する](/ja/authentication/managing-commit-signature-verification/signing-commits)
* [タグに署名する](/ja/authentication/managing-commit-signature-verification/signing-tags)