GitHubのコミットに署名してVerifiedマークが表示されるようにする。
すでにGitHubを利用したことがあるMacユーザが対象。
新しいGPGキーを生成する
GPG (Gnu Privacy Guard)は、ファイルの署名を検証したり、メールの暗号化・復号化を行うことができるツール。
PGP(Pretty Good Privacy)というツールをGNUライセンスにしたものがGPG。
ローカルで生成したGPGの公開キーをGitHubに追加することで、コミットに署名がつくようになる。
1. GPGツールのインストール
$ brew install gpg
2. GPGキーの生成 (対話形式)
[Press enter]
となっているところは、基本的にデフォルトでOK。Email address
は .gitconfig
で指定しているメールアドレスにする必要がある。
$ gpg --full-gen-key
> Please select what kind of key you want:
> (1) RSA and RSA
> (2) DSA and Elgamal
> (3) DSA (sign only)
> (4) RSA (sign only)
> (9) ECC (sign and encrypt) *default*
> (10) ECC (sign only)
> (14) Existing key from card
> Your selection? [Press enter]
> Please select which elliptic curve you want:
> (1) Curve 25519 *default*
> (4) NIST P-384
> (6) Brainpool P-256
> Your selection? [Press enter]
> Please specify how long the key should be valid.
> 0 = key does not expire
> <n> = key expires in n days
> <n>w = key expires in n weeks
> <n>m = key expires in n months
> <n>y = key expires in n years
> Key is valid for? (0) [Press enter]
> Key does not expire at all
> Is this correct? (y/N) y
> Real name: YOURNAME
> Email address: YOUREMAIL(.gitconfigと同じ)
> Comment: COMMENT(任意)
> You selected this USER-ID:
> "YOURNAME (COMMENT) <YOUREMAIL>"
> Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
最後にパスフレーズを2回入力する。コミット時に使用するので忘れないようにする!
> ┌──────────────────────────────────────────────────────┐
> │ Please enter the passphrase to │
> │ protect your new key │
> │ │
> │ Passphrase: ________________________________________ │
> │ │
> │ <OK> <Cancel> │
> └──────────────────────────────────────────────────────┘
3. GPGキーIDの確認
GPGのリストを表示して、[GPGキーID]
の部分を確認する。
$ gpg --list-secret-keys --keyid-format=long
> /Users/username/.gnupg/pubring.kbx
> ------------------------------------
> sec ed25519/[GPGキーID] YYYY-MM-DD [SC]
> ****
> uid [ultimate] YOURNAME (COMMENT) <YOUREMAIL>
> ssb cv25519/**** YYYY-MM-DD [E]
4. 公開キーをクリップボードにコピー
GitHubに追加するときに必要なのでコピーしておく。
$ gpg --armor --export [GPGキーID] | pbcopy
5. 秘密キーのエクスポート(任意)
PCの買い替えなどで、環境が変わる度にGPGキーを生成したくない方はエクスポートしておくと良い。
$ gpg --export-secret-keys [GPG キー ID] > seckey.gpg
以下のコマンドでインポートできる。
$ gpg --import seckey.gpg
GitHubアカウントにGPG公開キーを追加する
1. GitHubの Settings > SSH and GPG keys
にある New GPG key
ボタンをクリック
![](https://stdout.blog/wp-content/uploads/2021/09/8a0cd333f7b5614f0703e601721ac678.png)
2. Key
フィールドに、GPG公開キーの内容を貼り付け
GPGキーの生成で、クリップボードにコピーしておいた公開キーを貼り付ける。
![](https://stdout.blog/wp-content/uploads/2021/09/fc94fe7b754d352a90fbd18328e97592.png)
3. Add GPG key
をクリック
保存できていれば、以下のように表示されているはず。
![](https://stdout.blog/wp-content/uploads/2021/09/b54159fd4b0f3d11b323019f11f72086.jpg)
コミットに署名する
.gitconfig
にGPGキーIDを設定する。
[user]
name = YOURNAME
email = YOUREMAIL
signingkey = GPGキーID
あとは、コミット時に S
オプションを付けるだけで署名付きになるが、GPGキー生成時に設定したパスフレーズを入力する必要がある。
$ git commit -S -m '署名付きコミット'
S
オプションがなくても、コミットを常に署名付きにしたい場合は .gitconfig
に以下を追記しておく。
[commit]
gpgsign = true
コミットしたらエラーが出た!
環境に依るよが、コミットしたときに以下のようなエラーが出ることがある(自分は出た)。
> error: gpg failed to sign the data
> fatal: failed to write commit object
その場合は、.zshrc
などに以下を追記すると良いらしい。
export GPG_TTY=$(tty)
反映を忘れずに。
$ source ~/.zshrc
パスフレーズを毎回入力するのがめんどい!
パスフレーズの入力に pinentry-mac
を利用すれば、Mac標準のKeychainが使える。
$ brew install pinentry-mac
以下のコマンドを実行して、GPGで利用するPinentryのパスを指定する。
Intel MacとM1 Macではパスが違っているので、パスを確認してから指定するべき。
$ which pinentry-mac
> /usr/local/bin/pinentry-mac
$ echo "pinentry-program /usr/local/bin/pinentry-mac" > ~/.gnupg/gpg-agent.conf
設定変更を反映させるにはGPGの再起動が必要なため、gpg-agent
を以下のコマンドで終了させておく。
利用時に自動で起動するため、特にスタートなどはしなくて良い。
$ gpgconf --kill gpg-agent
適当にコミットしてみる。
$ git commit -S -m '署名付きコミット' --allow-empty
パスフレーズ入力が、以下のようなダイアログに変わっているはず。Save in Keychain
のところをチェックすれば、次回からパスフレーズ入力なしで署名付きコミットができる。
![](https://stdout.blog/wp-content/uploads/2021/09/80368839a1466dd7e2fe3c2091c8c046.jpg)
M1 MacでコミットしたらGPGエラーになる!
以下の記事を参照。
おわりに
以上で、コミットにVerifiedマークが付いたはず。
![](https://stdout.blog/wp-content/uploads/2021/09/e15d38f0adb3f0c71b57816ad8a61147.png)