Git 2.19 からタグやコミットの署名・検証に S/MIME がサポートされ、GitHub でも S/MIME 署名が検証されるようになった。
S/MIME Signature Verification | The GitHub Blog
ca-certificates に含まれている CA に辿れる S/MIME 証明書を使えば、PGP のように GitHub に公開鍵をアップロードしなくても GitHub 上で署名が検証される。
S/MIME で署名してそれを確認するまでの手順を記録しておく。
準備
Git のバージョンが 2.19 以降であることを確認
$ git --version
git version 2.19.0
Git が 2.19 より古い場合は、2.19 以上にアップグレードする。
smimesign をインストール
$ brew install smimesign
# 代わりにソースからビルドすることもできる
$ go get github.com/github/smimesign
Git の user.email 設定を確認
証明書のメールアドレスと一致している必要があると思われる。
現時点では、メールアドレスが一致していないタグを GitHub に push すると、タグの詳細画面で 500 エラーが発生した。
$ git config --get user.email
hoge@example.com
Git 側の設定は下記のようなコマンドで変更できる。
$ git config --global user.email "hoge@example.com"
有効な証明書があること
個人使用の場合は COMODO から無料で S/MIME 証明書を入手できる。
発行した証明書は OS の証明書ストアに取り込んでおく必要があった (macOS では「キーチェーンアクセス」アプリ)。
$ smimesign --list-keys
Emails
の行に自分のメールアドレスが出てくればよい。
署名に S/MIME を使うように設定
個別のリポジトリだけに適用する (--local
) か、全体に適用する (--global
) かが選べる。
既に GPG の設定があるとうまくいかなかった。~/.gitconfig
や .git/config
でコメントアウトして対応した。
個別のリポジトリに設定する場合
# リポジトリ内から実行
$ git config --local gpg.x509.program smimesign
$ git config --local gpg.format x509
グローバルに設定する場合
$ git config --global gpg.x509.program smimesign
$ git config --global gpg.format x509
署名鍵を指定
署名に使用する鍵を指定することができる。
指定しなくても動いたが、鍵が複数ある場合は指定しておくとよさそう。
smimesign --list-keys
の出力から、ID
の値を指定する。
$ git config --global user.signingkey "(鍵の ID)"
タグを署名する
$ git tag -s
GitHub 上では下記のように表示された。
コミットを署名する
$ git commit -S
署名されたコミットができる。
GitHub では下記のように表示された。
ローカルで署名を検証する
$ git show --show-signature
現時点では、署名の検証に失敗した場合にのみメッセージが表示され、成功した場合は特にメッセージが出ない様子。
smimesign
を入れていない環境で git log --show-signature
が止まった場合
S/MIME の設定をしていない環境で git log --show-signature
すると、S/MIME で署名したコミットのところで出力が止まってしまった。
smimesign
をインストールして、検証に smimesign
を使う設定をすると見ることができるようになった。
$ brew install smimesign
$ git config --global gpg.x509.program smimesign
See also
GitHub による解説
https://help.github.com/articles/about-commit-signature-verification/#smime-commit-signature-verification
smimesign
(github/smimesign)
https://github.com/github/smimesign