GitHubではコミットに「Verified」マークを付けることができます。
Verified なコミットは、GPG(GNU Privacy Guard)キーがあれば作成できます。
公開鍵基盤 Keybase は公開鍵の保管や、公開鍵によるWebサイト・SNSアカウントの認証がお手軽にできるサービスです。ここでは既にKeybaseのユーザである方向けに、Keybaseの認証鍵を GPG に登録し、Verified なコミットを生成する方法をまとめておきます。Keybaseの登録・利用方法についてはここでは触れません。
macOS前提で書いていきます。
環境変数 GPG_TTY の設定
export GPG_TTY=$(tty)
# fish shell なら `set -x GPG_TTY (tty)`
を .bashrc
等に書きます。
この環境変数が必要な理由: https://github.com/keybase/keybase-issues/issues/2798
GPG のセットアップ
brew install gnupg pinentry-mac
gpg-agent
を入れさせようとする記事が多いですが、現在は不要です。理由: https://stackoverflow.com/questions/52435650/gpg-agent-not-found-for-homebrew/52456873
その後
echo "pinentry-program /usr/local/bin/pinentry-mac" > ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agent
pinentry はパスフレーズ入力で使います。
Keybase の鍵を GPG に登録する
CLIツールとして keybase
が使える必要があります。もし、使えなかったら https://keybase.io/download からダウンロードしたり、PATHがきちんと通っているかを確認したりしましょう。
また、コマンドを打つ前に Keybase のアプリケーションを立ち上げてログインしておいてください。
まず公開鍵を GPG に import します。
keybase pgp export | gpg --import
次に秘密鍵を GPG に import します。
keybase pgp export --secret | gpg --allow-secret-key --import
秘密鍵の方はこういう風にパスフレーズを設定することになるはずです。
GPG の鍵を使って Git で署名付きコミットを行う
前述した設定がうまくいけば、
gpg --list-secret-keys
で
/Users/XXXXX/.gnupg/pubring.kbx
-------------------------------
sec rsa4096 2019-01-25 [SC] [有効期限: 2035-01-21]
1C48036***********************
uid [ 不明 ] HelloRusk <hellorusk1998@gmail.com>
ssb rsa4096 2019-01-25 [E] [有効期限: 2035-01-21]
このようにGPGに登録した鍵情報が表示されます。
ここで表示されているメールアドレス(hellorusk1998@gmail.com
の部分)と、コミットで利用するメールアドレスを一致させる必要があることに気をつけてください。
1C48036***********************
が署名キーで、これを Git に以下のように記憶させます。
git config --global user.signingkey 1C48036***********************
git config --global gpg.program $(which gpg)
これで、普段のコミットコマンドに-S
オプションを足した
git commit -S
で署名付きコミットができるようになりました。
なお、毎回-S
を足すことなく自動署名させたい場合は
git config --global commit.gpgsign true
とすればよいです。
また git log
でも--show-signature
オプションを付けることにより、署名を確認できます。署名付きコミットは以下のように表示されます。
* 45fd2de gpg: 火 9/10 21:00:25 2019 JSTに施された署名
| gpg: RSA鍵1C48036***********************を使用
| gpg: "HelloRusk <hellorusk1998@gmail.com>"からの正しい署名 [不明の]
| gpg: *警告*: この鍵は信用できる署名で証明されていません!
| gpg: この署名が所有者のものかどうかの検証手段がありません。
| 主鍵フィンガープリント: 1C48 **** **** **** **** **** **** **** **** ****
| verified commit
GitHub に Keybase の公開鍵を登録する
あとは、GitHubに署名付きコミットをpushした時に、GitHub側にそれを信頼させればよいです。
https://github.com/settings/keys を開いて、下側にある「GPG keys」から「New GPG key」ボタンをクリックすると、公開鍵を貼り付ける画面が出てきます。
ここに、Keybaseの公開鍵を貼り付けます。Keybaseの公開鍵は、鍵マークの横にある文字列をクリックすると出せます。
赤丸の部分をクリックして...
-----BEGIN PGP PUBLIC KEY BLOCK-----
から始まる文字列ですね。
なお、Keybase認証鍵で使っているメールアドレスが GitHub 側でも登録されている必要があります。登録されていなければ、「GPG keys」の画面で、メールアドレスの横に「Unverified」と書かれていると思うので、 https://github.com/settings/emails からそのメールアドレスを新しく登録しましょう。