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
223
Help us understand the problem. What is going on with this article?
@ciffelia

GitHubで署名されたコミットにバッジが表示されるようになったので設定してみる

追記(2021/04/21)

最近のGit for WindowsではGnuPGがバンドルされるようになったため、署名の設定方法が変わっています。この記事は古い内容となりますのでご注意ください。


まずはこちらの画像をご覧ください。
image
GitHubのコミット履歴ですが、コミットのSHAの左に見慣れないものが表示されていますね。
image
クリックするとこのような情報が表示されます。
実は、2016/4/6からGitHubはGPGによりデジタル署名されたコミットやタグにバッジを表示するようになりました
この記事はその設定ガイドです。私の環境はWindowsですが、すべてコマンドラインとブラウザ上での操作なのでMacやLinuxでも同じように行えます。

1. GPGツールをインストール

こちらからツールをダウンロード・インストールします。バイナリのダウンロードリンクは下のほうにあります。
image
画面の指示に従ってインストールしてください。

2. GPG鍵ペアを生成

以下のコマンドを実行します。なお、鍵の長さ、名前、メールアドレスなどを後で修正することはできませんのでご注意ください。1

gpg --full-gen-key
gpg (GnuPG) 2.3.0; Copyright (C) 2021 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ご希望の鍵の種類を選択してください:
   (1) RSA と RSA
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (9) ECC (署名と暗号化) *デフォルト
  (10) ECC (署名のみ)
  (14) カードに存在する鍵
あなたの選択は?

ここでは1を入力します。

RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (3072)

鍵の長さは長いほど安全です。GitHubでは4096ビットにすることが推奨されているので、そうしましょう。

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)

特に理由がなければ0でいいでしょう。

鍵の有効期間は? (0)は無期限です
これで正しいですか? (y/N)

yを入力します。

GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。

本名:

本名と書かれていますが、Gitの署名に利用するのであれば本名でなくても構いません(GitHubのIDなど)。ここで入力した名前は他のユーザーがコミット履歴から確認することができますのでご注意ください。

電子メール・アドレス:

GitHubに登録されている認証されたメールアドレスを入力してください。ここから確認できます。ここで入力した内容は他のユーザーがコミット履歴から確認することができますのでご注意ください。

コメント:

何も入力しなくて構いません。

次のユーザIDを選択しました:
    "Ciffelia <mc.prince.0203@gmail.com>"

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)?

間違っていなければOを入力します。

秘密鍵を保護するためにパスフレーズがいります。

秘密鍵を保存するためのパスワード(パスフレーズ)を入力します。Windowsではパスワード入力のダイアログが表示されます。今後デジタル署名してコミットしたりタグをつけたりする際にこのパスワードが必要になりますので、忘れないよう保管しておいてください。

たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。

鍵の生成中です。指示通りにマウスを動かしたりキーボードをランダムに打ったりして、しばらく待ちましょう。

gpg: 鍵34D88615F1C3466Dを究極的に信用するよう記録しました
gpg: 失効証明書を '(略)' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。

pub   rsa4096 2021-04-20 [SC]
      780DE93702A9E73ED3D23BF634D88615F1C3466D
uid                      Ciffelia <mc.prince.0203@gmail.com>
sub   rsa4096 2021-04-20 [E]

生成完了です。

3. 公開鍵をGitHubに登録

以下のコマンドを実行します。

gpg --list-secret-keys --keyid-format SHORT

以下のような表示がされるはずです。

pub 4096R/12029D92 2016-04-10
uid [ 究極 ] prince-0203 <mc.prince.0203@gmail.com>
sub 4096R/3EA5B922 2016-04-10

鍵のIDをコピーします。ここでは12029D92です。

続いて以下のコマンドを実行します。

gpg --armor --export コピーした鍵のID

以下のような表示がされるはずです。

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFcJ6QcBEADe70sEQC7ATz1d/8YHIf/ZjKd4ILpZ+1DZmwTM8TP0x+66Fx/T
drXEiPsFnp5vrNQE6WqQyNOlQCKM620JRmIzzCmLTe8j0NqJTbt1+TMJPKfq1Cgh
(中略)
wgigO2D1BuF+AgrxLZNYU1oPy5eH2H9h6c1CVgxiQtJzAThP4AusP9wByvwt2GUC
6etZ3nqxmHVmfeUrJUgnf4YwlYP/Jp7fd5+KLx87ACjWv18tD08xhxKx0Y9l2/qa
ixCCbw+M
=h3oF
-----END PGP PUBLIC KEY BLOCK-----

-----BEGIN PGP PUBLIC KEY BLOCK-----から-----END PGP PUBLIC KEY BLOCK-----までをコピーします。

次に、GitHubのSSH and GPG keysにアクセスし、New GPG Keyをクリックします。
image

Keyに先ほどコピーした公開鍵(-----BEGIN PGP PUBLIC KEY BLOCK-----から-----END PGP PUBLIC KEY BLOCK-----まで)を貼り付けます。
image

Add GPG Keyをクリックします。
image

これでGitHubへの鍵の登録は完了です。

4. 鍵をGitに認識させる

以下の2つのコマンドをそれぞれ実行します。

git config --global gpg.program gpg
git config --global user.signingkey コピーした鍵のID

これで署名されたコミットを作成する準備が整いました。

5. 署名されたコミットを作成

署名されたコミットを作成するには、git commitに引数-S(大文字)を付けます。

git commit -m "署名されたコミット" -S

また、以下のコマンドを実行するとgit commit時に引数-Sを付けなくても署名されるようになります(--globalを外せば現在のリポジトリのみでの設定になります)。

git config --global commit.gpgsign true

ただし、Linus Torvaldsはコミットではなくタグに署名することを推奨しているようです。タグに署名すると、

  • コミットの一部ではなく、全てに対して署名できる
  • コミットと署名を分離できる

などの利点があるそうです。この観点からすると、コミットに自動で署名することはあまりふさわしくありません。詳しくはこの記事のコメント欄をご覧ください。

6. 署名されたタグを作成

署名されたタグを作成するにはgit tag-s(小文字)を付けます。

git tag -s mytag

これで設定は完了です。git pushしてバッジが表示されることを確認してみましょう。

7. 参考


  1. 内容を修正したい場合は、鍵を作り直した上で新しい鍵をGitHubに登録する必要があります。 

223
Help us understand the problem. What is going on with this article?
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

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
223
Help us understand the problem. What is going on with this article?