Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Git のタグやコミットを (PGP ではなく) S/MIME で署名する

More than 1 year has passed since last update.

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 上では下記のように表示された。

スクリーンショット 2018-11-13 14.18.25.png

コミットを署名する

$ git commit -S

署名されたコミットができる。

GitHub では下記のように表示された。

スクリーンショット 2018-11-13 11.59.04.png

ローカルで署名を検証する

$ 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

logly
ログから新しい価値を生み出すことをテーマとし、アドテクノロジーやメディアテクノロジー領域での事業を展開しています。
https://corp.logly.co.jp/
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