コンテンツにスキップ

署名付きコミットを行う

署名付きコミットとは

署名付きコミットとは、コミットにGPG署名を付けることです。これにより、コミットの内容が変更されていないことを確認できます。 署名にはS/MIME署名とGPG署名の2種類がありますが、GitではGPG署名が使われます。

準備

GPGコマンドのインストール

Ubuntu(WSL)
1
2
sudo apt update
sudo apt install gpg
macOS
1
brew install gpg

GPGキーペアの作成

GPGキーペアの作成
1
gpg --full-generate-key
GPGキーペアの作成
  1. 以下のようなメッセージが表示されます。デフォルトの設定で問題ありません。
    1
    2
    3
    4
    5
    6
    7
    Please select what kind of key you want:
    (1) RSA and RSA (default)
    (2) DSA and Elgamal
    (3) DSA (sign only)
    (4) RSA (sign only)
    (14) Existing key from card
    Your selection? 1
    
  2. 鍵のサイズを選択します。デフォルトの設定で問題ありません。
    1
    2
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (3072) 4096
    
  3. 鍵の有効期限を選択します。デフォルトの設定で問題ありません。
    1
    2
    3
    4
    5
    6
    7
    Please specify how long the key should be valid.
            0 = key does not expire
        <n>  = key expires in n days
        <n>w = key expires in n weeks
        <n>m = key expires in n months
        <n>y = key expires in n years
    Key is valid for? (0) 0
    
  4. 問題がなければ、yを入力してEnterキーを押します。
    1
    Is this correct? (y/N) y
    
  5. ユーザー名とメールアドレスを入力します。
  6. ユーザ名は、GitHubのユーザ名を入力します。
  7. メールアドレスは、GitHubのメールアドレスを入力します。
  8. コメントは任意です。
    1
    2
    3
    Real name: <username>
    Email address: <email>
    Comment:
    
  9. パスフレーズを入力します。パスフレーズは、GPGキーを使用する際に必要です。
    1
    Passphrase: ________________________________________ 
    
  10. 以下のようなメッセージが表示されれば、GPGキーペアの作成が完了です。
    1
    gpg: key <key_id> marked as ultimately trusted
    

GPGキーの確認

1
gpg --list-secret-keys --keyid-format LONG
GPGキーの確認
  1. 以下のようなメッセージが表示されます。
    1
    2
    3
    4
    5
    /home/<username>/.gnupg/pubring.kbx
    -------------------------------
    sec   4096R/<key_id> <date> [expires: <date>]
    uid                          <username> <email>
    ssb   4096R/<sub_key_id> <date> [expires: <date>]
    
  2. <key_id>がGPGキーのIDです。このIDを使用して、署名付きコミットを行います。
  3. <sub_key_id>はサブキーのIDです。このIDは、GPGキーのサブキーを使用する際に必要です。
  4. <username>は、ユーザ名です。
  5. <email>は、メールアドレスです。
  6. <date>は、GPGキーの作成日です。
  7. [expires: <date>]は、GPGキーの有効期限です。
  8. 4096Rは、GPGキーのサイズです。

公開鍵の登録

公開鍵の取得

1
gpg --armor --export <key_id>
公開鍵の取得
  1. 公開鍵が表示されます。
    1
    2
    3
    4
    5
    6
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v2
    
    mQINBF9Z8QUBEAC
    ...
    -----END PGP PUBLIC KEY BLOCK-----
    
  2. 表示された内容全てをコピーします。

GitHubに公開鍵を登録

  1. GitHubにログインします。
  2. 右上のアイコンをクリックし、Settingsを選択します。
  3. 左側のメニューからSSH and GPG keysを選択します。
  4. New GPG keyをクリックします。
  5. Keyに、公開鍵をコピーして貼り付けます。
  6. Add GPG keyをクリックします。
  7. GitHubに公開鍵が登録されました。

GPGキーの設定

GPGキーの設定

1
git config --global user.signingkey <key_id>

GPGキーの確認

1
git config --global --get user.signingkey
GPGキーの確認
  1. 以下のようなメッセージが表示されます。
    1
    <key_id>
    
  2. <key_id>がGPGキーのIDです。

署名付きコミット

署名付きコミット

署名付きコミットを行うには、-Sオプションを使用します。

1
git commit -S -m "commit message"

リポジトリ内のコミット全てに署名を付ける

1
2
cd <repository>
git config commit.gpgsign true
リポジトリ内のコミット全てに署名を付ける
  1. <repository>には、署名を付けたいリポジトリのパスを指定します。
  2. このコマンドを実行すると、リポジトリ内のコミット全てに署名が付けられます。
  3. この設定は、リポジトリ内の.git/configに保存されます。

全てのリポジトリのコミット全てに署名を付ける

全てのリポジトリのコミット全てに署名を付ける

この設定は、全てのリポジトリのコミット全てに署名が付けられます。

1
git config --global commit.gpgsign true

パスフレーズをキャッシュに記憶する

1
git config --global credential.helper cache
1
git config --global credential.helper store
1
git config --global credential.helper 'cache --timeout=3600'
パスフレーズをキャッシュに記憶する
  1. cacheは、パスフレーズをキャッシュに記憶しますが、一時的なものです。
  2. storeは、パスフレーズをファイルに記憶しますが、平文で保存されるため、注意が必要です。
  3. --timeout=3600は、パスフレーズをキャッシュに記憶する時間を指定します。デフォルトは15分です。

コメント