vscode の Git パネルでも GPG 署名付きコミットを可能にする
コミットメッセージが複数行書きやすかったり, 最近だとコミットメッセージ書く時に Copilot のアシストが効くので, 開発の時は git commit を vscode のサイドバー (左パネル) の Git (Source Control) を使って GUI ですることが多いのですが, コミットに GPG 署名をつける方法が一癖あり, 調べても全然情報がなかったので, 残しておきます.
commit に GPG 署名をつける
- commit に GPG 署名をつけることで, 自分がそのコミットをしたことを証明できます
- 逆にいうと, 署名をしていない場合, コミットが自分のものかどうか判断するのは user.email や user.name でしかできないので, なりすましなどをされてしまう恐れがあります
- GitHub では, GPG key を, SSH key と同様に登録することができ, そのコミットが正しくそのユーザによるものだと確認がとれたコミットには, 左横に
Verified
と表示されます- GitHub 上で行われる merge などは, とくに設定しなくても, GitHub の鍵を用いて署名が行われています
GPG key を生成し, 署名を有効にする方法については, 以下の記事などが参考になります
cf.
mac の場合の gpg インストールは, brew で簡単にできます
brew install gpg
cf.
vscode の Git 拡張の GUI 上で署名付きコミットをする
本題です.
まず, vscode の設定から, Enable commit signing with GPG, X.509, or SSH.
を true
にします.
しかし, これだけでは以下のようなエラーが生じます.
CLI から, git commit -S
は問題なくできる場合でも, vscode の GUI からコミットした場合には秘密鍵が見つからないとなり, commit に失敗します.
CLI で実行する場合には, 以下のように .zshrc
で, テレタイプデバイスを指定しているので, passphrase
の要求などのインタラクティブな動作を行うことができます.
.zshrc
export GPG_TTY=$(tty)
そのため, おそらくこれは, vscode 内部で実行する時に秘密鍵の passphrase
を渡せていないことにより生じているものなので, passphrase を渡す必要があるのですが, これを上手くやってくれる拡張機能を見つけました.
ついでに, 毎回 passphrase を入力するのも面倒なので, この拡張機能には, passphrase をキャッシュする機能があり非常に便利です.
インストール後, vscode の下部に, 鍵のアイコンが追加されるので, それをクリックします.
そこで, passphrase を入力することで, 鍵を使用できるようになり, 右下で passphrase をキャッシュするか聞かれるので, 有効にすることができます.
これで, 無事 commit することができるようになりました.
epilogue
雑談です.
先日, 2 月ごろに, Mastodon や Misskey の ActivityPub プロトコルの Fediverse 界隈では, 大規模な DoS やメンションを悪用した荒らしなどの攻撃があり, 大きな問題になりました.
その中で, サーバインスタンスの連絡用メールアドレスを取得され悪用されるといった被害もあり, 多くの鯖缶が被害を受けたのですが, 私のサーバも被害を受けました.
この件, commit の署名もそうですが, Verified
とついてなくても, その人のアイコンや名前が表示されていたら, その人がしたものと信じて疑わないことになりがちですが, 常に本当にそうなのかと立ち止まって考えるように, 情報セキュリティを成立させるには, 発信者だけでなく, 受け手側の意識もすごく大事だなと思ったりしました.
Discussion