WindowsのSourceTreeでGitコミット時にPGP署名をする

Saturday, October 10, 2020

はじめに

2020年に入り、私はWindowsでgit操作をする場面が激増しました。 macOSでGitコミットする際にPGPで署名していましたので、同様のことをWindowsでも実施できるようにしました。

そもそも、PGPで署名をする動機は署名をするとGitHubが下図の赤枠のように Verified と表示され私自身がなんとなく嬉しいからです。

./images/figure_01.png

そこで、この記事ではいくつかあるWindows向けGitクライアントのうち、利用者が多いであろうSourceTreeで Gitコミット時にPGP署名をする方法についてご紹介します。

筆者の環境は以下の通りです。

それでは、Gitコミット時にPGP署名をするための設定をしていきます。

SourceTreeをインストールする

まず、SourceTreeを入手してインストールします。

Windows版SourceTreeは以下の場所にインストールされます。

%LOCALAPPDATA%\Atlassian\SourceTree

SourceTreeはGitを内臓しており、オプション画面で使用するGitのパスを明記しています。

./images/figure_02.png

下記のパスのGitを使っていることがわかります。

%LOCALAPPDATA%\Atlassian\SourceTree\git_local\cmd\git.exe

上位フォルダに関心を寄せて以下のフォルダに移ります。

%LOCALAPPDATA%\Atlassian\SourceTree\git_local

こちらのフォルダを見ると、 git-bash.exemingw32 フォルダを確認できます。

./images/figure_03.png

GPGはバンドルされているのでしょうか。MINGW32があるので /usr/bin/gpg にある可能性があります。 確認のためエクスプローラーで検索をかけた結果が下図です。

./images/figure_04.png

上図の検索結果からGPGが /usr/bin/gpg にあることがわかります。

SourceTreeのGit BashとGPGのバージョンを確認する

ご存知の通り、SourceTreeのツールバーにある ターミナル アイコンをクリックするとGit Bashを起動できます。

./images/figure_05.gif

これはSourceTreeのオプション画面で Git Bashをデフォルトターミナルとして使用 が設定として有効になっているからです。

./images/figure_06.png

そのGit Bashは下記の場所にあります。

%LOCALAPPDATA%\Atlassian\SourceTree\git_local\git-bash.exe

Git BashでGPGのバージョンを確認します。

$ gpg --version # /usr/bin/gpg を想定
gpg (GnuPG) 2.2.20-unknown
libgcrypt 1.8.5

以下でGPGのリリースノートを確認できます。

どうやら、GPGの最新バージョンは2.2.23で、先月にCVEの対応を入れたようです。

GnuPG version 2.2.23 has been released today. This version fixes a critical security bug in 2.2.21 and 2.2.22 (CVE-2020-25125).

Please follow the instructions from the announcement mail and update affected installations. See also our bug entry #5050.

GPG v2.2.20をそのまま使うのは少々不安が残りますので、Gpg4winを使います。

Gpg4winをインストールする

Gpg4winを下記で入手してインストールします。

インストール時にPGPキーの生成やインポートのGUIを提供する Kleopatra を選択します。 GPA はお好みで。

./images/figure_07.png

Gpg4winは以下にGPGをインストールします。

C:\Program Files (x86)\GnuPG\bin\gpg

PGPキーは Kleopatra でインポートできるのですが、お手元にPGPキーがない場合は次節のエクスポート方法を参考にしてください。

PGPキーをエクスポートする

まずはmacOSで使っているPGPキー (秘密鍵と公開鍵) をエクスポートしましょう。 すでにファイルとしてキーをお持ちの場合はそちらをお使いいただければ結構です。

エクスポートは下記のコマンドで可能です。

# 秘密鍵をエクスポートする際に公開鍵も同時に出力します
gpg --export-secret-keys --armor yourname@example.com > gpg-privatekey.backup

PGPキーをKleopatraでインポートする

Kleopatraを起動してインポートボタンをクリックしてインポートしたいPGPキーを選択します。

./images/figure_08.png

インポートしたPGPキーは以下で管理されます。

%APPDATA%/gnupg

SourceTreeのGit BashでGpg4winのGPGを使う設定にする

それでは、SourceTreeの Git Bash でGpg4winのGPGのバージョンを確認します。

$ "/c/Program Files (x86)/GnuPG/bin/gpg" --version
gpg (GnuPG) 2.2.23
libgcrypt 1.8.6

Git BashでGitの設定値を変更します。

git config --global user.signingkey {YOUR_PGP_KEY_ID} # 下8桁
git config --global commit.gpgsign true
git config --global gpg.program "/c/Program Files (x86)/GnuPG/bin/gpg"

SourceTreeでコミット時にPGP署名をする

コミットします。PGPキーにパスフレーズを設定している場合、コミット処理中に入力を求められます。

./images/figure_09.gif

GitHubで結果をみてみます。

./images/figure_10.png

上図の赤枠部分を見るとPGP署名されていることがわかります。

まとめ

この記事ではGitコミット時にPGP署名をする方法、PGPキーのエクスポートとインポートについてご紹介しました。

WindowsGitPGPGPG

UnityのOpen C# ProjectでVisual Studioが起動しない