コミット署名の検証について
コミットとタグにローカルで署名して、行った変更の根拠を他のユーザに信頼してもらうことができます。 コミットまたはタグに暗号で検証可能な GPG、SSH、または S/MIME 署名がある場合、GitHub はコミットまたはタグに "Verified" とマークします。
![リポジトリのコミット リスト内のコミットのスクリーンショット。 [検証済み] がオレンジ色の枠線で強調表示されています。](/assets/cb-17614/images/help/commits/verified-commit.png)
コミットまたはタグに検証できない署名が含まれている場合、GitHub はそのコミットまたはタグを "Unverified" とマークします。
ほとんどの個々のユーザーにとって、コミットの署名には GPG または SSH が最適です。 通常、S/MIME 署名は、大規模な組織のコンテキストで必要です。 SSH 署名は最も簡単に生成できます。 既存の認証キーを GitHub にアップロードして、署名キーとして使用することもできます。 GPG 署名キーの生成は、SSH キーを生成するよりも複雑ですが、GPG には SSH にはない機能があります。 GPG キーは、使用されなくなったときに有効期限が切れるか、取り消すことができます。 GPG 署名には、期限切れまたは失効に関する情報が含まれる場合があります。
リベースとマージの署名検証
pull request で Rebase と Merge オプションを使用する場合は、ヘッド ブランチのコミットがコミット署名の検証なしでベース ブランチに追加されることに注意することが重要です。 このオプションを使用すると、元のコミットのデータとコンテンツを使用して、GitHub によって変更されたコミットが作成されます。 つまり、GitHub は、このコミットを本当に作成していないため、汎用システム ユーザーとして署名することはできません。 GitHub では、コミッターの秘密署名キーにアクセスできないため、ユーザーの代わりにコミットに署名できません。
これを回避するには、ローカルでリベースとマージを行い、変更を pull request のベース ブランチにプッシュします。
詳しくは、「GitHubのマージ メソッドについて」をご覧ください。
リポジトリ管理者は、ブランチでコミット署名を必須として、署名および検証されていないすべてのコミットをブロックできます。 詳しくは、「保護されたブランチについて」をご覧ください。
GitHub 上の署名されたコミットあるいはタグの検証ステータスをチェックして、コミットの署名が検証されない理由を表示することができます。 詳しくは、「コミットおよびタグの署名の検証ステータスを確認する」をご覧ください。
サイト管理者が Web コミット署名を有効にしている場合、GitHub は GPG を自動的に使用して、Web インターフェイスで行ったコミットに署名します。 GitHub によって署名されたコミットは、確認済みの状態になります。
https://HOSTNAME/web-flow.gpg で入手可能な公開キーを使用して、署名をローカルで確認できます。 詳しくは、「Web コミット署名を構成する」をご覧ください。
GPG コミット署名の検証
自分で生成した GPG キーで、GPG を使ってコミットに署名できます。
GitHub では、OpenPGP ライブラリを使用することで、ローカルで署名されたコミットとタグが、お使いの GitHub Enterprise Server インスタンス でアカウントに追加した公開キーに対して暗号化で検証可能であることを確認します。
GPG を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください。
-
[既存の GPG キーがあるかチェックする](/authentication/managing-commit-signature-verification/checking-for-existing-gpg-keys) -
[新しい GPG キーを生成する](/authentication/managing-commit-signature-verification/generating-a-new-gpg-key) -
[GITHUB アカウントに GPG キーを追加します](/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account) -
[Git へ署名キーを伝える](/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key) -
[コミットに署名する](/authentication/managing-commit-signature-verification/signing-commits) -
[タグに署名する](/authentication/managing-commit-signature-verification/signing-tags)
SSH コミット署名の検証
SSH を使うと、自分で生成した SSH キーを使ってコミットに署名できます。 詳細については、Gitのリファレンスドキュメントを参照してください。 GitHub で認証するために SSH キーを既に使用している場合は、署名キーとして使用するために同じキーをもう一度アップロードすることもできます。 アカウントに追加できる署名キーの数に制限はありません。
GitHub では、open source Ruby ライブラリである ssh_data を使用して、お使いの GitHub Enterprise Server インスタンス でアカウントに追加した公開キーに対して、ローカル署名されたコミットとタグが暗号で検証可能であることを確認します。
メモ
SSH 署名の検証は、Git 2.34 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。
SSH を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください。
-
[既存の SSH キーを確認する](/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys) -
[新しい SSH キーを生成する](/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) -
[GITHUB アカウントに SSH 署名キーを追加します](/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account) -
[Git へ署名キーを伝える](/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key) -
[コミットに署名する](/authentication/managing-commit-signature-verification/signing-commits) -
[タグに署名する](/authentication/managing-commit-signature-verification/signing-tags)
S/MIME コミット署名の検証
S/MIME を使い、自分の Organization で発行した X.509 キーを用いてコミットに署名できます。
GitHub では、Mozilla ブラウザーで使われているのと同じ信頼ストアである Debian ca-certificates パッケージを使って、ローカル署名されたコミットとタグが信頼されたルート証明書の公開キーに対して暗号化で検証可能であることを確認します。
メモ
S/MIME 署名の検証は、Git 2.19 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。
S/MIME を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください。
-
[Git へ署名キーを伝える](/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key) -
[コミットに署名する](/authentication/managing-commit-signature-verification/signing-commits) -
[タグに署名する](/authentication/managing-commit-signature-verification/signing-tags)
公開キーを GitHub にアップロードする必要はありません。
参考資料
-
[AUTOTITLE](/authentication/managing-commit-signature-verification/signing-commits) -
[AUTOTITLE](/authentication/managing-commit-signature-verification/signing-tags) -
[AUTOTITLE](/authentication/troubleshooting-commit-signature-verification)