- GitLabのGPGの扱い方
- GPGキーの生成
- アカウントへのGPGキーの追加
- GPG キーと Git の関連付け
- コミットへのサイン
- コミットの検証
- GPG 鍵の失効
- GPGキーの削除
- 署名されていないコミットの拒否
- GPG署名API
- さらに読む
GPGによるコミットの署名
- GitLab 9.5で導入されました。
- GitLab 10.1 でサブキーのサポートが追加されました。
GitLabリポジトリで行われたGitコミットには、GPG鍵を使って署名することができます。 署名されたコミットは、コミッターの身元が確認できればVerifiedと表示されます。 コミッターの身元を確認するには、GitLabはその公開GPG鍵を要求します。
GPG認証タグはまだサポートされていません。
GPGの詳細については、参考文献をご覧ください。
GitLabのGPGの扱い方
GitLabは独自の鍵リングを使ってGPG署名を検証します。 公開鍵サーバーにはアクセスしません。
GitLab で検証されるコミット:
- コミッターはGPG公開鍵/秘密鍵ペアを持っていなければなりません。
- コミッターの公開鍵が GitLab アカウントにアップロードされている必要があります。
- GPGキーのメールアドレスの一つは、コミッターがGitLabで使っている認証済みのメールアドレスと一致しなければなりません。
- コミッターのメールアドレスは、GPG鍵の検証済みメールアドレスと一致しなければなりません。
GPGキーの生成
まだGPG鍵を持っていない場合は、以下の手順で始めることができます:
- お使いのオペレーティング・システムにGPGをインストールしてください。お使いのオペレーティング・システムに
gpg2
がインストールされている場合は、以下のコマンドのgpg
をgpg2
に置き換えてください。 -
以下のコマンドで秘密鍵と公開鍵のペアを生成します:
gpg --full-gen-key
注:Windowsや他のMacOSバージョンのGpg4winのような場合、ここでのコマンドはgpg --gen-key
。 -
最初の質問は、どのアルゴリズムを使用できるかです。希望の種類を選択するか、Enter 、デフォルト(RSAおよびRSA)を選択します:
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) Your selection? 1
-
次の質問はキーの長さです。
4096
を選択することをお勧めします:RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 4096 Requested keysize is 4096 bits
-
鍵の有効期間を指定します。 これは主観的なものであり、デフォルト値である「無期限」を使用することもできます:
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 Key does not expire at all
-
y
と入力して、入力した答えが正しいことを確認してください:Is this correct? (y/N) y
-
本名、この鍵に関連付けるメールアドレス(GitLab で使用している認証済みメールアドレスと一致する必要があります)、オプションのコメントを入力します(Enter を押すとスキップされます):
GnuPG needs to construct a user ID to identify your key. Real name: Mr. Robot Email address: <your_email> Comment: You selected this USER-ID: "Mr. Robot <your_email>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
- 聞かれたら強力なパスワードを選び、確認のために2回入力してください。
-
以下のコマンドを使用して、作成したばかりのGPG秘密鍵を一覧表示します:
gpg --list-secret-keys --keyid-format LONG <your_email>
<your_email>
を上記で入力したメールアドレスに置き換えてください。 -
sec
で始まるGPG鍵IDをコピーします。 以下の例では、30F2B65B9246B6CA
です:sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA uid [ultimate] Mr. Robot <your_email> ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
-
そのIDの公開鍵をエクスポートします(前のステップで使用した鍵IDを置き換えてください):
gpg --armor --export 30F2B65B9246B6CA
- 最後に公開鍵をコピーし、プロフィール設定に追加します。
アカウントへのGPGキーの追加
プロフィールの設定でGPGキーを追加できます:
-
右上のアバターをクリックし、「設定」に進んでください。
-
GPG keysタブに移動し、公開_鍵を_‘Key’ボックスに貼り付けます。
-
最後にAdd keyをクリックして GitLab に追加すると、フィンガープリントと対応するメールアドレス、作成日が表示されます。
GPG キーと Git の関連付け
GPG 鍵を作成してアカウントに追加したら、今度はどの鍵を使うのかを git に伝えます。
-
以下のコマンドを使用して、作成したばかりのGPG秘密鍵を一覧表示します:
gpg --list-secret-keys --keyid-format LONG <your_email>
<your_email>
を上記で入力したメールアドレスに置き換えてください。 -
sec
で始まるGPG鍵IDをコピーします。 以下の例では、30F2B65B9246B6CA
です:sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA uid [ultimate] Mr. Robot <your_email> ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
-
その鍵を使ってコミットに署名するよう、gitに伝えます:
git config --global user.signingkey 30F2B65B9246B6CA
30F2B65B9246B6CA
を GPG 鍵 ID に置き換えてください。 -
(オプション)gitが
gpg
を使っていて、secret key not available
やgpg: signing failed: secret key not available
のようなエラーが出る場合は、以下のコマンドを実行してgpg2
に変更してください:git config --global gpg.program gpg2
コミットへのサイン
GPGキーを作成し、アカウントに追加したら、コミットへの署名を開始できます:
-
以前と同じようにコミットします。唯一の違いは、
-S
フラグを追加したことです:git commit -S -m "My commit msg"
- と聞かれたら、GPGキーのパスフレーズを入力します。
- GitLab にプッシュし、コミットが検証されていることを確認します。
コミットのたびに-S
フラグを打つのが面倒なら、git に自動的に署名させることもできます:
git config --global commit.gpgsign true
コミットの検証
-
プロジェクトやマージリクエストの中で、コミットタブに移動します。 署名されたコミットには、GPG 署名の検証状況に応じて、”Verified” または “Unverified” のバッジが表示されます。
-
GPGバッジをクリックすると、署名の詳細が表示されます。
GPG 鍵の失効
鍵を失効させると、すでに署名済みのコミットは検証されなくなります。 この鍵を使用して検証されたコミットは、未検証の状態に変わります。 この鍵を失効させると、今後のコミットも未検証のままになります。 このアクションは、鍵が漏洩した場合に使用します。
GPGキーを失効させるには
- 右上のアバターをクリックし、「設定」に進んでください。
- GPGキーのタブに移動します。
- 削除したいGPGキーの横にある「Revoke」をクリックします。
GPGキーの削除
鍵を削除しても、すでに署名されたコミットの検証は解除されません。 この鍵を使用して検証されたコミットは検証されたままです。 この鍵を削除すると、プッシュされていないコミットだけが検証されないままになります。 すでに署名されたコミットの検証を解除するには、関連するGPG鍵をアカウントから削除する必要があります。
アカウントからGPGキーを削除するには
- 右上のアバターをクリックし、「設定」に進んでください。
- GPGキーのタブに移動します。
- 削除したいGPGキーの上にあるゴミ箱アイコンをクリックします。
署名されていないコミットの拒否
GPG署名されていないコミットをプッシュルールで拒否するようにプロジェクトを設定できます。
GPG署名API
API経由でコミットからGPG署名を取得する方法について説明します。
さらに読む
GPGの詳細については、こちらをご覧ください: