概要
Gitのコミットを作成したのが自分である事を証明する方法として、コミットに署名する方法が用意されているが、従来からあるGPGによる署名は正直色々と面倒くさい。
2021年11月にそれに変わる方法としてSSH鍵による署名がサポートされ、追ってGitHubでもSSH鍵によるコミットの署名の検証ができるようになった。この方法を使用すれば、GPGによる署名に比べるとかなり手軽に署名を行うことが可能になる。
備忘録としてGitのコミットにSSH鍵で署名を行い、GitHubでコミットの署名検証済み(Verified)マークが付くようにする手順を記載しておく。
必要なもの
- Git 2.34.0 (SSH鍵による署名がサポートされたバージョン)以降
- ssh-agentが稼働していること
後に述べるがssh-agentが稼働しており秘密鍵の登録をできることが必須。ssh-agentの設定方法はいくらでもWebに情報があるのでそちらを参考に。
GitのコミットにSSH鍵による署名を行う
-
署名用のSSH鍵を生成する
ssh-keygen -t ed25519 -f signing-key
signing-key
(秘密鍵)とsigning-key.pub
(公開鍵)が生成される -
ssh-agentに秘密鍵を登録する
ssh-add signing-key
今のところ、秘密鍵はssh-agentを通じて渡す方法しかない模様。gitのコンフィグレーションで秘密鍵ファイルを指定などは出来ないようだ。セキュリティ対策のためだろうか。
-
GitリポジトリでSSH鍵によりコミットに署名する設定を行う。
git config commit.gpgsign true
コミット時に自動的に署名を行う設定。false(デフォルト)の場合は
git commit
に-A
オプションを付けた時のみ署名を行う。git config gpg.format ssh
GPGではなくSSH鍵による署名を行う設定。
git config user.signingkey "(公開鍵ファイルの内容)" もしくは git config user.signingkey 公開鍵ファイルのパス
署名するSSH鍵の設定。直接公開鍵の内容を書いても公開鍵のファイルパスを指定してもよい。お好みで。
リポジトリ単位ではなくユーザアカウント全体の設定にしたい場合はgit config
に--global
オプションを付けてもよいだろう。
以上の設定により、gitリポジトリにコミットを作成した時にSSH鍵による署名が行われるようになる。
GitHubに署名用公開鍵を登録する
- GitHubアカウントの「Settings」>「SSH and GPG keys」で「New SSH key」ボタンを押す
- 「Title」に適切な名称を入力し、「Key type」で「Signing key」を選択し、「Key」に署名用SSH鍵の公開鍵の内容をコピペして、「Add SSH key」ボタンを押す
- アカウントの認証があるので、正常に認証を終了できれば署名用公開鍵が登録され、「SSH and GPG keys」のページの「Signing key」の一覧に表示される
GitHubのコミットのVerifiedマークを確認する
署名付きのコミットを作成したリポジトリをGitHubにpushする。署名付きのコミットには下の画像のように「Verified」マークが付くようになる。