GPGでコミットに署名する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GPG(GNU Privacy Guard)キーを使用して、GitLabリポジトリで行うコミットに署名できます。
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キーを設定している場合はそのGPGキーを表示し、GPGキーを設定していないユーザーの場合は空白のページを表示します。- ユーザーのプロフィール(例:
https://gitlab.example.com/<USERNAME>)にアクセスします。ユーザープロフィールの右上隅で、GPGパブリックキーを表示( )を選択します。このボタンは、ユーザーがキーを設定している場合にのみ表示されます。
コミット署名を設定する
コミットに署名するには、ローカルマシンとGitLabアカウントの両方を設定する必要があります:
- GPGキーを作成します。
- GPGキーをアカウントに追加します。
- GPGキーをGitに関連付けます。
- Gitコミットに署名します。
GPGキーを作成する
GPGキーをまだお持ちでない場合は、次の手順で作成します:
お使いのオペレーティングシステムにGPGをインストールします。オペレーティングシステムに
gpg2がインストールされている場合は、このページのコマンドでgpgをgpg2に置き換えてください。キーペアを生成するには、使用している
gpgのバージョンに適したコマンドを実行します:# Use this command for the default version of GPG, including # Gpg4win on Windows, and most macOS versions: gpg --gen-key # Use this command for versions of GPG later than 2.1.17: gpg --full-gen-keyキーで使用するアルゴリズムを選択するか、Enterを押して、デフォルトオプションの
RSA and RSAを選択します。キーの長さ (ビット単位) を選択します。GitLabは4096ビットキーを推奨します。
キーの有効期間を指定します。この値は主観的なものであり、デフォルト値は有効期限なしです。
回答を確認するには、
yと入力します。名前を入力します。
メールアドレスを入力します。GitLabアカウントの検証済みのメールアドレスと一致する必要があります。
オプション。名前の後に括弧で囲んで表示するコメントを入力します。
GPGには、これまでに入力した情報が表示されます。情報を編集するか、O (
Okayのため) を押して続行します。強力なパスワードを入力し、もう一度入力して確認します。
プライベートGPGキーを一覧表示するには、このコマンドを実行して、キーの生成時に使用したメールアドレスで
<EMAIL>を置き換えます:gpg --list-secret-keys --keyid-format LONG <EMAIL>出力で、
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]関連付けられた公開キーを表示するには、このコマンドを実行して、前の手順のGPGキーIDで
<ID>を置き換えます:gpg --armor --export <ID>BEGIN PGP PUBLIC KEY BLOCK行とEND PGP PUBLIC KEY BLOCK行を含む公開キーをコピーします。次の手順でこのキーが必要になります。
GPGキーをアカウントに追加する
ユーザー設定にGPGキーを追加するには:
- GitLabにサインインします。
- 左側のサイドバーで、アバターを選択します。
- プロファイルの編集を選択します。
- GPGキー( )を選択します。
- 新しいキーを追加を選択します。
- キーに、公開キーを貼り付けます。
- キーをアカウントに追加するには、キーを追加を選択します。
GitLabには、キーのフィンガープリント、メールアドレス、および作成日が表示されます。
キーを追加した後は、編集できません。代わりに、問題のあるキーを削除して、再度追加してください。
GPGキーをGitに関連付ける
GPGキーを作成してアカウントに追加したら、このキーを使用するようにGitを設定する必要があります:
作成したばかりのプライベートGPGキーを一覧表示するには、このコマンドを実行して、キーのメールアドレスで
<EMAIL>を置き換えます:gpg --list-secret-keys --keyid-format LONG <EMAIL>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]このコマンドを実行して、キーでコミットに署名するようにGitを設定し、GPGキーIDで
<KEY ID>を置き換えます:git config --global user.signingkey <KEY ID>
Gitコミットに署名する
公開キーをアカウントに追加した後、個々のコミットに手動で署名するか、署名されたコミットがデフォルトになるようにGitを設定できます:
個々のGitコミットに手動で署名するには:
署名するコミットに
-Sフラグを追加します:git commit -S -m "My commit message"要求されたら、GPGキーのパスフレーズを入力します。
GitLabにプッシュし、コミットが検証されていることを確認します。
デフォルトですべてのGitコミットに署名するには、次のコマンドを実行します:
git config --global commit.gpgsign true
署名キーを条件付きで設定する
仕事用や個人用など、別々の目的で署名キーを管理している場合は、.gitconfigファイルでIncludeIfステートメントを使用して、コミットに署名するキーを設定します。
前提要件:
- Gitバージョン2.13以降が必要です。
メインの
~/.gitconfigファイルと同じディレクトリに、.gitconfig-gitlabなどの2番目のファイルを作成します。メインの
~/.gitconfigファイルに、GitLab以外のプロジェクトでの作業用のGit設定を追加します。この情報をメインの
~/.gitconfigファイルの最後に追加します:# The contents of this file are included only for GitLab.com URLs [includeIf "hasconfig:remote.*.url:https://gitlab.com/**"] # Edit this line to point to your alternative configuration file path = ~/.gitconfig-gitlab別の
.gitconfig-gitlabファイルで、GitLabリポジトリにコミットするときに使用する上書きの設定を追加します。明示的に上書きしない限り、メインの~/.gitconfigファイルからのすべての設定が保持されます。この例では、次のようになります。# Alternative ~/.gitconfig-gitlab file # These values are used for repositories matching the string 'gitlab.com', # and override their corresponding values in ~/.gitconfig [user] email = you@example.com signingkey = <KEY ID> [commit] gpgsign = true
GPGキーを取り消す
GPGキーが侵害された場合は、取り消してください。キーを取り消すと、今後および過去のコミットの両方が変更されます:
- このキーで署名された過去のコミットは、未検証としてマークされます。
- このキーで署名された今後のコミットは、未検証としてマークされます。
GPGキーを取り消すには:
- 左側のサイドバーで、アバターを選択します。
- プロファイルの編集を選択します。
- GPGキー( )を選択します。
- 削除するGPGキーの横にある取り消しを選択します。
GPGキーを削除する
GitLabアカウントからGPGキーを削除すると:
- このキーで署名された以前のコミットは、検証されたままになります。
- このキーを使用しようとする今後のコミット(作成済みでまだプッシュされていないコミットを含む)は検証されません。
アカウントからGPGキーを削除するには:
- 左側のサイドバーで、アバターを選択します。
- プロファイルの編集を選択します。
- GPGキー( )を選択します。
- 削除するGPGキーの横にある削除( )を選択します。
今後および過去のコミットの両方の検証を解除する必要がある場合は、代わりに関連付けられたGPGキーを取り消してください。
関連トピック
- Web UIで行われたコミットのコミット署名を設定
- GPGリソース:
トラブルシューティング
シークレットキーが利用できない
エラーsecret key not availableまたはgpg: signing failed: secret key not availableが表示された場合は、gpgの代わりにgpg2を使用してみてください:
git config --global gpg.program gpg2GPGキーがパスワードで保護されていて、パスワード入力プロンプトが表示されない場合は、Shellのrcファイル (通常は~/.bashrcまたは~/.zshrc) にexport GPG_TTY=$(tty)を追加します
GPGがデータの署名に失敗する
GPGキーがパスワードで保護されていて、次のいずれかのエラーが表示される場合:
error: gpg failed to sign the data
fatal: failed to write commit object
gpg: signing failed: Inappropriate ioctl for deviceパスワード入力プロンプトが表示されない場合:
テキストエディタで、Shellの設定ファイル (通常は
~/.bashrcまたは~/.zshrc) を開きます。ファイルに次の行を追加します:
export GPG_TTY=$(tty)ファイルを保存してテキストエディタを終了します。
変更を適用します。次のいずれかを選択します:
- ターミナルを再起動します。
source ~/.bashrcまたはsource ~/.zshrcを実行します。
正確な手順は、オペレーティングシステムとShellの設定によって異なる場合があります。