SSHキーでコミットとタグを署名する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
コミットまたはタグをSSHキーで署名すると、GitLabはGitLabアカウントに関連付けられているSSH公開キーを使用して署名を暗号学的に検証します。成功した場合、GitLabはコミットまたはタグに検証済み ラベルを表示します。
コミットが検証済みとみなされるためのGitLabの条件:
- コミットの署名に使用したSSHキーは、使用目的を認証と署名または署名に設定したうえで、GitLabアカウントに追加する必要があります。
- Git設定のコミッターメールアドレスは、GitLabアカウントに関連付けられている検証済みのメールアドレスと一致する必要があります。
署名が有効であっても、コミッターのメールがアカウントで検証済みのメールと一致しない場合、コミットは未検証としてマークされます。
使用タイプが認証と署名である限り、GitLabへのgit+ssh認証とコミット署名に同じSSHキーを使用できます。SSHキーをGitLabアカウントに追加するページで確認できます。
SSHキーをGitLabアカウントと関連付けて管理する方法の詳細については、GitLabとの通信にSSHキーを使用するを参照してください。
Gitを構成してSSHキーでコミットとタグを署名する
SSHキーを作成し、GitLabアカウントに追加したら、キーの使用を開始するようにGitを設定します。
前提条件:
Git 2.34.0以降。
OpenSSH 8.1以降。
OpenSSH 8.7には、壊れた署名機能があります。OpenSSH 8.7を使用している場合は、OpenSSH 8.8にアップグレードしてください。
使用タイプが
Authentication & SigningまたはSigningのSSHキー。次のSSHキータイプがサポートされています:- ED25519
- ED25519_SK
- RSA
- ECDSA
- ECDSA_SK
キーを使用するようにGitを設定するには、次の手順に従います:
コミット署名にSSHを使用するようにGitを設定します:
git config --global gpg.format ssh署名キーとして使用する公開SSHキーを指定し、ファイル名(
~/.ssh/examplekey.pub)をキーの場所に変更します。ファイル名は、キーの生成方法によって異なる場合があります:git config --global user.signingkey ~/.ssh/examplekey.pub
SSHキーでコミットに署名する
前提条件:
- SSHキーを作成済みである。
- GitLabアカウントにキーを追加済みである。
- SSHキーを使用してコミットに署名するようにGitを設定済みである。
- Gitの
user.emailが、GitLabアカウントに関連付けられている検証済みのメールアドレスと一致している。
コミットに署名するには、次の手順に従います:
コミットに署名するときは、
-Sフラグを使用します:git commit -S -m "My commit msg"オプション。コミットするたびに
-Sフラグを入力したくない場合は、次のようにコミットに自動的に署名するようにGitに指示します:git config --global commit.gpgsign trueSSHキーが保護されている場合、Gitはパスフレーズの入力を求めます。
GitLabにプッシュします。
コミットが検証されていることを確認します。署名の検証では、
allowed_signersファイルを使用してメールとSSHキーを関連付けます。このファイルの構成に関するヘルプについては、ローカルでコミットを検証するを参照してください。
タグに署名して検証する
この機能の利用は機能フラグによって制御されます。詳細については、履歴を参照してください。
SSHキーを使用してGitでコミットとタグに署名するように設定したら、タグに署名できます:
Gitタグを作成するときは、
-sフラグを追加します:git tag -s v1.1.1 -m "My signed tag"GitLabにプッシュし、このコマンドでタグが署名されていることを確認します:
git tag --verify v1.1.1オプション。
-sフラグなしでタグを自動的に署名するには、以下を実行します:git config --global tag.gpgsign true
コミットを検証する
GitLab UIで、署名されたすべてのタイプのコミットを検証できます。SSHキーで署名されたコミットは、ローカルでも検証できます。
コミットをローカルで検証する
ローカルでコミットを検証するには、GitがSSH公開キーをユーザーに関連付けるための許可された署名者ファイルを作成します。この例では~/.ssh/allowed_signersを使用していますが、別のパスを指定できます。以下の手順で同じパスを使用してください。
SSHディレクトリを作成します:
mkdir -p ~/.ssh許可された署名者ファイルを作成します。
touch ~/.ssh/allowed_signersGitがファイルを使用するように構成します:
git config gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers"許可された署名者ファイルにエントリを追加します。
<MY_KEY>をキーの名前に置き換えます。ステップ1で別のパスを選択した場合は、~/.ssh/allowed_signersをそのパスに置き換えます:# Declaring the `git` namespace helps prevent cross-protocol attacks. echo "$(git config --get user.email) namespaces=\"git\" $(cat ~/.ssh/<MY_KEY>.pub)" >> ~/.ssh/allowed_signers結果のエントリには、メールアドレス、キータイプ、およびキーのコンテンツが含まれています:
example@gitlab.com namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmaTS47vRmsKyLyK1jlIFJn/i8wdGQ3J49LYyIYJ2hv検証したい追加のユーザーごとにこの手順を繰り返します。他のコントリビューターと共同作業する場合は、このファイルをGitリポジトリにチェックインすることを検討してください。
git log --show-signatureを使用して、コミットの署名ステータスを表示します:$ git log --show-signature commit e2406b6cd8ebe146835ceab67ff4a5a116e09154 (HEAD -> main, origin/main, origin/HEAD) Good "git" signature for johndoe@example.com with ED25519 key SHA256:Ar44iySGgxic+U6Dph4Z9Rp+KDaix5SFGFawovZLAcc Author: John Doe <johndoe@example.com> Date: Tue Nov 29 06:54:15 2022 -0600 SSH signed commit
削除されたSSHキーで署名されたコミット
コミットの署名に使用したSSHキーを失効または削除できます。詳細については、SSHキーを削除するを参照してください。
SSHキーを削除すると、キーで署名されたコミットに影響を与える可能性があります:
- SSHキーを失効すると、以前のコミットが未検証としてマークされます。新しいSSHキーを追加するまで、新しいコミットも未検証としてマークされます。
- SSHキーを削除しても、以前のコミットには影響しません。新しいSSHキーを追加するまで、新しいコミットは未検証としてマークされます。