ちょっとかっこいいので作ってみることにしました。
この正体は何?
まずそももそもこれは何なのかというと、デジタル署名です。Gitにはコミットやタグにデジタル署名をつける機能があり、GitHubに公開鍵を登録しておくと署名付きのコミットに上の画像のようなマークがつきます。
デジタル署名はGnuPGで作成できます。
以下ではLinuxでの具体的な手順を書きます。macOSでも、GnuPGのインストール以外は多分共通だと思います(未検証)
ここではデジタル署名そのものについて詳しく説明しませんので、詳しく知りたい人はWikipediaあたりをご参照あれ。
GnuPGのインストール
まずはGnuPGをインストール。Ubuntuならこれで。sudo apt install gnupg gnupg2わざわざUbuntu以外を使う人はきっと自分で調べられるはず。
鍵の作成
次に、以下のコマンドで署名用の鍵を作成してください。gpg --gen-key名前とメアドとパスフレーズを入力してください。
それ以外の有効期限とかコメントとかはデフォルトのままでOKなので、エンターキーをタンタンと叩いていきます。
公開鍵の登録
鍵を作り終わったら、続いて公開鍵をGitHubに登録します。まずはこのコマンドで公開鍵を表示してください。
gpg -a --export
-----BEGIN PGP PUBLIC KEY BLOCK-----
で始まる文字列が出力されるので、-----END PGP PUBLIC KEY BLOCK-----
までをクリップボードにコピーします。これが公開鍵です。次にGitHubのSSH and GPG Keysを開き、New GPG keyをクリックしてください。
公開鍵を入力するテキストボックスにさきほどコピーした公開鍵を貼り付けて
Add GPG Key
をクリックしてください。これで公開鍵の登録が完了しました。
Gitに鍵IDを登録
最後にGit側にも鍵を登録します。ただし、登録するのは鍵そのものではなく鍵IDと呼ばれる数桁の16進文字列です。
以下のコマンドを実行してください。
gpg -k8桁か16桁か40桁くらいの16進文字列がどこかに表示されているはずです。多分本体は40桁で、8桁とか16桁のやつはその一部でどれでも鍵IDとして認識してくれると思います。
鍵IDを確認したら、以下のコマンドを実行してください。
git config --global gpg.program gpg2 git config --global user.signingKey 鍵ID git config --global commit.gpgSign trueこれで登録完了。
最後の行は、コミット時に毎回署名をつける場合に使います。
普段は署名せず、特定のコミットのみ手動で署名する場合は3行目は不要です。
その場合、署名したいコミットで
git commit -S
のように-S
オプションをつけましょう。
ちなみにタグに署名する場合は
git tag -s
のように-s
オプションをつけます。こちらは小文字なので注意。
こんなエラーが出たときは…
環境によってはこんなエラーが出ることがあります。error: gpg failed to sign the data fatal: failed to write commit objectこれが出たときは、
~/.bashrc
に以下の内容を追加しましょう。
export GPG_TTY=$(tty)これで署名付きコミットができるようになるはずです。
やってみた。
できた🎉
秘密鍵の保管方法
いきなりストレージがお亡くなりになったときとかマシンを紛失したときのことを考えると、どこかに秘密鍵をバックアップしておいたほうがいいです。ただし秘密鍵は誰にも漏らさないように保管しなければいけないので、DropboxとかGoogleドライブにそのまま入れておくのはおすすめしません。
おすすめの方法は、KeePassXCのようなパスワードマネージャーにパスフレーズと秘密鍵を登録して、パスワードデータベースをDropboxやGoogleドライブに保管しておくことです。
KeePassXCはパスワードだけでなくファイルも登録できます。
おわりに
以上、とりあえず署名したい人向けのデジタル署名講座でした。本格的な運用を考えると、本当はマスターキーで署名するのではなくて署名用のサブキーを使ったほうがいいとか、鍵に有効期限をつけたほうがいいとか、失効証明書も作っておいたほうがいいとか、鍵にアイコン(写真)も追加できるよとか、いろいろ注意する点はありますが、個人用途でGitHub用に署名したいだけなら上記の方法だけでいいでしょう。
慣れてきて本格的な運用に興味が湧いたら上記のことを調べてみてください。
ちなみに本家Gitにも署名についてのドキュメントがあります。これはすでに鍵を作っていることを前提とした記事ですが、より詳しい内容です。
0 件のコメント:
コメントを投稿