Git - SSHでコミットに署名

Keeperボルトに保存されているSSHキーを使用してGitコミットに署名

概要

Gitのコミットに署名することは重要です。署名することで、作成者の確認、コミットされた内容の整合性の確保、なりすましの防止、そして否認防止が可能になります。秘密鍵で暗号化署名を使用すると、貢献内容の信頼性とセキュリティへの取り組みが示され、共同作業者間の信頼が構築され、リポジトリが改ざんや悪意のあるコードから保護されます。

この統合により、開発者は Keeperボルト (Keeperシークレットマネージャー経由) で保護された SSHキーを使用してGitコミットに署名できるようになります。

最新のgit-ssh-signバイナリをダウンロードする

特徴

  • Keeperボルトに保存されているSSHキーを使用してGitコミットに署名します。

  • 安全なDevOpsワークフローのためにディスク上のSSHキーが不要になります。

  • Windows、MacOS、Linux で動作します。

  • ソースコードはこちらのGithubページでご参照いただけます。

要件

この統合を利用するには、以下が必要となります。

設定

1. シークレットマネージャーの構成

  • Keeperウェブボルトまたはデスクトップアプリにログインします。

  • 「Git SSH Keys」などの名前で共有フォルダを作成します。

  • 共有フォルダにSSHキー記録を追加します。

  • 生成します。

この統合では、Keeperシークレットマネージャーを使用してボルトからSSHキーを取得します。

すべてのシステムで、ユーザーのホーム ディレクトリの.config/keeper/ssh-sign.jsonにシークレットマネージャー構成ファイルを配置しておきます。この構成が見つからない場合は、バックアップとしてssh-sign.jsonがチェックされます。シークレットマネージャーアプリケーションは、SSHキーが保存されている共有フォルダにアクセスできる必要があります

アプリケーションの設定と構成ファイルの取得に関するヘルプについては、こちらで詳細な手順を参照してください。

2. Gitの設定

シークレットマネージャーを正常に構成した後、Gitがコミットに自動的に署名するように構成できます。必要に応じてローカルまたはグローバルで実行できます。

構成には次の4つの情報が必要となります。

  1. すべてのコミットに署名したいこと

  2. デフォルトのGPG署名ではなくSSH署名を使用すること

  3. この統合の実行可能ファイルの場所 (こちらのページからダウンロードしていただけます)

  4. 署名に使用するSSHキーのUID

以下のコマンドを使用して、ローカルGitリポジトリに対して上記を実行します (グローバルに設定するには--globalフラグを追加します)。

git config commit.gpgsign true
git config gpg.format ssh
git config gpg.ssh.program <path to this binary>
git config user.signingkey <SSH Key UID>

Git構成には以下の属性が含まれるようになります。

[commit]
	gpgsign = true
[gpg]
	format = ssh
[user]
	signingKey = <SSH Key UID>
[gpg "ssh"]
	program = path/to/ssh-sign

3. GitHub / GitLabにキーを追加

3.1 GitHubのセットアップ

GitHubがコミットの署名に使用された署名を検証するには、SSHキーの公開キーをGitHubアカウントにアップロードする必要があります。その後、GitHubはこの公開キーを使用して署名を検証し、 UIにverifiedタグが表示されます。

公開鍵をアカウントに追加する方法の詳細については、GitHubの公式ドキュメントをご参照ください。

キーの種類を必ず「signing key」 (署名キー) に設定してください。

3.2 GitLabのセットアップ

GitLabがコミットの署名に使用された署名を検証するには、SSHキーの公開キーを GitLabアカウントにアップロードする必要があります。その後、GitLab はこの公開キーを使用して署名を検証し、 UI にverifiedタグが表示されます。

公開鍵をアカウントに追加する方法の詳細については、Gitlabの公式ドキュメントをご参照ください。

キーの種類を必ず「signing key」 (署名キー) か「Authentication and signing」 (認証と署名) に設定してください。

署名の検証

Gitは、ターミナルまたはIDEインターフェイスのどちらを使用するかにかかわらず、すべてのコミットに自動的に署名するように設定されています。また、コミット署名に-Sフラグを使用する必要もなくなりました。

ターミナル内でgit show --pretty=rawを実行することでコミットが署名されたことを確認できます。

GitHub と GitLab

コミットに署名してGitHubまたはGitLabにプッシュすると、Git履歴のコミットの横にVerifiedタグが自動的に表示されます。これ以上の作業は必要ありません。

ローカル検証

リポジトリが独自のデータセンターに保存されている場合は、コマンドライン上でコミットをローカルで検証できます。これを行うには、承認された署名キーの記録であるallowed_signersファイルを作成する必要があります。

通常、このファイルは.ssh/allowed_signersにグローバルに保存されるか、.git/allowed_signersのローカルリポジトリに保存されます。このファイルへのパスを.gitconfig または.git/configファイルに追加する必要があります。

git config gpg.ssh.allowedSignersFile path/to/file

allowed_signersファイルの各行は、承認された署名キーのプリンシパルである必要があります。以下のように、公開キーに関連付けられたメールアドレスで始まり、スペースで区切る必要があります。

test@example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEQvSrBv28KLAjYO7pD91prhlenrm3hZ4B7DdcB/4/H+

許可された署名者ファイルの形式については、こちらのウェブサイトで詳しく説明されています。

複数のメールアドレスを 1 つの公開キーに関連付けることは構文としては間違っていないものの、推奨されておらず、現在はサポートされていません。

git履歴を確認するには、以下を行います。

# Verify all commits in the repo
git log --show-signature

# Verify the last commit in the repo
git log --show-signature -1

ソース

この統合のソースコードはオープンソースであり、GitHubで入手できます。問題がある場合は、こちらのGithubページからチケットを作成してください。

最終更新