Fehlermeldung
gpg: Can't check signature: No public key
Auch ausgegeben als
- gpg: Can't check signature: no public key
GnuPG 2.4 schreibt „No public key“; Übersetzungen und ältere Builds können in der Groß- und Kleinschreibung abweichen. Die Prüfbefehle von Git enden mit einem Exit-Code ungleich null und reichen die Ausgabe von gpg durch.
Was der Fehler bedeutet
Das Objekt ist signiert, und gpg hat die Signatur gefunden, aber der Schlüsselbund enthält keinen öffentlichen Schlüssel, der zum Fingerabdruck des Ausstellers passt, deshalb kann gpg nicht sagen, ob die Signatur gut oder schlecht ist. Die vorangehenden Zeilen („Signature made …“, „using … key <fingerprint>“) zeigen dir, welchen Schlüssel du brauchst. Das ist keine fehlgeschlagene Signatur – es fehlt ein Schlüssel.
Warum der Fehler auftritt
Der Schlüssel des Signierers wurde nie importiert
häufigEin frisch eingerichteter Rechner, ein CI-Runner, ein separates `GNUPGHOME` oder jemand aus dem Team, dessen Schlüssel du nie erhalten hast.
Kein automatischer Abruf von Schlüsseln
gelegentlichGnuPG ruft Schlüssel nur dann automatisch ab, wenn `auto-key-retrieve` und ein Keyserver konfiguriert sind; viele Keyserver liefern User-IDs ohne Verifizierung nicht mehr aus.
Der Unterschlüssel zum Signieren ist neuer als deine Kopie
gelegentlichHat der Signierer einen neuen Unterschlüssel zum Signieren hinzugefügt, fehlt dieser in einer alten Kopie des öffentlichen Schlüssels. Aktualisiere den Schlüssel aus seiner Quelle.
So behebst du den Fehler
- 1.
Schlüssel aus einer vertrauenswürdigen Quelle importieren
Importiere ihn von der Website des Projekts, aus den Release Notes oder von einem Keyserver, und prüfe den Fingerabdruck über einen separaten Kanal, bevor du Signaturen vertraust.
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.
Von einer Plattform veröffentlichte Schlüssel verwenden
GitHub stellt die für jedes Konto registrierten GPG-Schlüssel unter `https://github.com/<user>.gpg` bereit.
bash # Keys a GitHub user registered for signing (verify the fingerprint before trusting it) curl -sSL https://github.com/<user>.gpg | gpg --import
Verwandte Fehler
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