Help us understand the problem. What is going on with this article?

Keybase の鍵で GitHub のコミットに Verified バッジをつける

More than 1 year has passed since last update.

GitHubではコミットに「Verified」マークを付けることができます。

スクリーンショット 2019-09-10 21.22.38.png

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

スクリーンショット 2019-09-10 21.56.44.png

秘密鍵の方はこういう風にパスフレーズを設定することになるはずです。

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」ボタンをクリックすると、公開鍵を貼り付ける画面が出てきます。

スクリーンショット 2019-09-10 22.32.18.png

ここに、Keybaseの公開鍵を貼り付けます。Keybaseの公開鍵は、鍵マークの横にある文字列をクリックすると出せます。

スクリーンショット 2019-09-10 22.34.19.png

赤丸の部分をクリックして...

スクリーンショット 2019-09-10 22.38.02.png

-----BEGIN PGP PUBLIC KEY BLOCK-----から始まる文字列ですね。
なお、Keybase認証鍵で使っているメールアドレスが GitHub 側でも登録されている必要があります。登録されていなければ、「GPG keys」の画面で、メールアドレスの横に「Unverified」と書かれていると思うので、 https://github.com/settings/emails からそのメールアドレスを新しく登録しましょう。

Reference

HelloRusk
最近は https://zenn.dev/hellorusk を使っています
https://hellorusk.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away