# Git - SSHでコミットに署名

<figure><img src="https://docs.keeper.io/~gitbook/image?url=https%3A%2F%2F762006384-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MJXOXEifAmpyvNVL1to%252Fuploads%252FSo22AInILhJ9X94G8D1x%252Fksm-header-git.png%3Falt%3Dmedia%26token%3Da01381fe-77f0-47b5-8e3f-522da742c8b1&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=f6b477cc&#x26;sv=1" alt=""><figcaption></figcaption></figure>

### 概要 <a href="#about" id="about"></a>

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

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

> [**最新のgit-ssh-signバイナリをダウンロードする**](https://github.com/Keeper-Security/git-ssh-sign/releases)

### 特徴 <a href="#features" id="features"></a>

* Keeperボルトに保存されているSSHキーを使用してGitコミットに署名します。
* 安全なDevOpsワークフローのためにディスク上のSSHキーが不要になります。
* Windows、MacOS、Linux で動作します。
* ソースコードは[こちらのGithubページ](https://github.com/Keeper-Security/git-ssh-sign)でご参照いただけます。

### 要件 <a href="#prerequisites" id="prerequisites"></a>

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

* Keeperシークレットマネージャーへのアクセス (詳細については[クイックスタートガイド](https://docs.keeper.io/jp/keeperpam/secrets-manager/quick-start-guide)のページをご参照ください)
  * Keeperアカウントでシークレットマネージャーのアドオンが有効である
  * シークレットマネージャー強制適用ポリシーが有効になっているロールのメンバーシップ
* SSHキーが共有された[Keeperシークレットマネージャーアプリケーション](https://github.com/Keeper-Security/gitbook-jp-secrets-manager/blob/main/about/terminology/README.md#application)
  * アプリケーションの作成手順については、[クイックスタートガイド](https://docs.keeper.io/jp/keeperpam/secrets-manager/quick-start-guide)をご参照ください。
* 初期化された[Keeperシークレットマネージャー構成](https://docs.keeper.io/jp/keeperpam/secrets-manager/about/secrets-manager-configuration)
  * この統合ではJSON形式の設定のみが受け入れられます
* Gitのバージョン2.34.0以降がインストールされている

### 設定 <a href="#setup" id="setup"></a>

### 1. シークレットマネージャーの構成 <a href="#id-1.-secrets-manager-configuration" id="id-1.-secrets-manager-configuration"></a>

* Keeperウェブボルトまたはデスクトップアプリにログインします。
* 「Git SSH Keys」などの名前で共有フォルダを作成します。
* 共有フォルダにSSHキー記録を追加します。
* 生成します。

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

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

アプリケーションの設定と構成ファイルの取得に関するヘルプについては、[こちらで詳細な手順](https://github.com/Keeper-Security/gitbook-jp-secrets-manager/blob/main/about/secrets-manager-configuration/README.md#creating-a-secrets-manager-configuration)を参照してください。

### 2. Gitの設定 <a href="#id-2.-git-config" id="id-2.-git-config"></a>

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

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

1. すべてのコミットに署名したいこと
2. デフォルトのGPG署名ではなくSSH署名を使用すること
3. この統合の実行可能ファイルの場所 ([こちらのページからダウンロードしていただけます](https://github.com/Keeper-Security/git-ssh-sign/releases))
4. 署名に使用するSSHキーのUID

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

```sh
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構成には以下の属性が含まれるようになります。

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

### 3. GitHub / GitLabにキーを追加 <a href="#id-3.-add-keys-to-github-gitlab" id="id-3.-add-keys-to-github-gitlab"></a>

#### **3.1 GitHubのセットアップ**

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

公開鍵をアカウントに追加する方法の詳細については、[GitHubの公式ドキュメント](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account?tool=webui\&platform=linux)をご参照ください。

{% hint style="warning" %}
キーの種類を必ず「signing key」 (署名キー) に設定してください。
{% endhint %}

#### **3.2 GitLabのセットアップ**

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

公開鍵をアカウントに追加する方法の詳細については、[Gitlabの公式ドキュメント](https://docs.gitlab.com/ee/user/ssh.html#add-an-ssh-key-to-your-gitlab-account)をご参照ください。

{% hint style="warning" %}
キーの種類を必ず「signing key」 (署名キー) か「Authentication and signing」 (認証と署名) に設定してください。
{% endhint %}

### 署名の検証 <a href="#verify-signatures" id="verify-signatures"></a>

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

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

### GitHub と GitLab <a href="#github-and-gitlab" id="github-and-gitlab"></a>

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

<figure><img src="https://docs.keeper.io/~gitbook/image?url=https%3A%2F%2F762006384-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MJXOXEifAmpyvNVL1to%252Fuploads%252F9pW1WJbiObPFFTAMVo2o%252Fimage.png%3Falt%3Dmedia%26token%3D32e1a4f1-b7d4-4cc1-8fbf-c54dc18a0a28&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=5e6f0e8d&#x26;sv=1" alt=""><figcaption></figcaption></figure>

### ローカル検証 <a href="#local-verification" id="local-verification"></a>

リポジトリが独自のデータセンターに保存されている場合は、コマンドライン上でコミットをローカルで検証できます。これを行うには、承認された署名キーの記録である`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+
```

> 許可された署名者ファイルの形式については、[こちらのウェブサイト](https://www.man7.org/linux/man-pages/man1/ssh-keygen.1.html)で詳しく説明されています。

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

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

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

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

### ソース <a href="#source" id="source"></a>

この統合のソースコードはオープンソースであり、[GitHub](https://github.com/Keeper-Security/git-ssh-sign)で入手できます。問題がある場合は、[こちらのGithubページ](https://github.com/Keeper-Security/git-ssh-sign/issues)からチケットを作成してください。
