Mensagem de erro
gpg: Can't check signature: No public key
Também aparece como
- gpg: Can't check signature: no public key
O GnuPG 2.4 escreve “No public key”; traduções e builds mais antigos podem usar outras maiúsculas e minúsculas. Os comandos de verificação do Git terminam com código diferente de zero e repassam a saída do gpg.
O que significa
O objeto está assinado e o gpg encontrou a assinatura, mas o chaveiro não tem nenhuma chave pública correspondente à impressão digital do emissor, então ele não consegue dizer se a assinatura é boa ou ruim. As linhas anteriores (“Signature made …”, “using … key <fingerprint>”) dizem de qual chave você precisa. Não é uma assinatura que falhou — é uma chave que falta.
Por que acontece
A chave do signatário nunca foi importada
comumUma máquina nova, um runner de CI, um `GNUPGHOME` separado ou um colega de equipe cuja chave você nunca recebeu.
Sem busca automática de chaves
ocasionalO GnuPG não busca chaves automaticamente, a menos que `auto-key-retrieve` e um servidor de chaves estejam configurados; muitos servidores de chaves já não fornecem IDs de usuário sem verificação.
A subchave de assinatura é mais nova que a sua cópia
ocasionalSe o signatário adicionou uma nova subchave de assinatura, uma cópia antiga da chave pública dele não a tem. Atualize a chave a partir da fonte dela.
Como corrigir
- 1.
Importar a chave de uma fonte confiável
Importe do site do projeto, das notas de versão ou de um servidor de chaves e confira a impressão digital por um canal separado antes de confiar nas assinaturas.
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.
Usar as chaves que uma plataforma publica
O GitHub disponibiliza as chaves GPG registradas de cada usuário em `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
Erros relacionados
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