GnuPG (gpg --verify, git verify-commit / verify-tag / log --show-signature)Git
エラーメッセージ
gpg: Can't check signature: No public key
別の表記
- gpg: Can't check signature: no public key
GnuPG 2.4 は「No public key」と出力します。翻訳されたメッセージや古いビルドでは、大文字と小文字の使い方が異なることがあります。Git の検証コマンドは 0 以外の終了ステータスで終了し、gpg の出力をそのまま表示します。
このエラーの意味
オブジェクトは署名されており、gpg は署名を見つけましたが、キーリングに発行者のフィンガープリントと一致する公開鍵がないため、署名が正しいかどうかを判断できません。必要な鍵は、直前の行(「Signature made …」「using … key <fingerprint>」)でわかります。これは署名の検証失敗ではなく、鍵がないだけです。
発生する理由
署名者の鍵が一度もインポートされていない
よくある新しいマシンや CI ランナー、別の `GNUPGHOME` を使っている場合や、鍵を一度も受け取っていないチームメンバーの署名を検証する場合です。
鍵が自動的に取得されない
ときどき`auto-key-retrieve` と鍵サーバーが設定されていない限り、GnuPG は鍵を自動的に取得しません。また、多くの鍵サーバーは、検証を経ていないユーザー ID を配布しなくなっています。
署名用の副鍵が手元の鍵のコピーより新しい
ときどき署名者が新しい署名用の副鍵を追加した場合、その公開鍵の古いコピーにはその副鍵が含まれていません。鍵を入手元から更新してください。
修正方法
- 1.
信頼できる入手元から鍵をインポートする
プロジェクトのウェブサイト、リリースノート、または鍵サーバーからインポートし、署名を信頼する前に、別の経路でフィンガープリントを確認してください。
bash # Import the signer's key from a trusted source, then compare the fingerprint out of band curl -sSL https://example.com/release-signing-key.asc | gpg --import gpg --fingerprint release@example.com git verify-commit HEAD - 2.
プラットフォームが公開している鍵を使う
GitHub は、各ユーザーが登録した GPG 鍵を `https://github.com/<user>.gpg` で公開しています。
bash # Keys a GitHub user registered for signing (verify the fingerprint before trusting it) curl -sSL https://github.com/<user>.gpg | gpg --import
関連するエラー
gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]GnuPG (gpg --verify, git verify-commit / verify-tag)error: gpg failed to sign the dataGit (commit -S, tag -s, commit.gpgsign) with GnuPGerror: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh sign…Git (verify-commit, log --show-signature, merge --verify-signatures) with gpg.format=ssh