Fehlermeldung
Signature verification failed: incorrect signature
Auch ausgegeben als
- Couldn't verify signature: namespace does not match
- Could not verify signature.
Ein Principal, der in der Allowed-Signers-Datei nicht für diesen Schlüssel aufgeführt ist, scheitert nur mit „Could not verify signature.“ (ohne vorangehende Detailzeile).
OpenSSH ssh-keygen -Y verify (SSHSIG) — also used by Git for SSH-signed commits
Was der Fehler bedeutet
`ssh-keygen -Y verify` hat eine SSHSIG-Signatur geprüft, und die kryptografische Prüfung ist fehlgeschlagen: Die von der Standardeingabe gelesenen Daten sind nicht exakt das, was signiert wurde, oder die Signatur wurde mit einem anderen Schlüssel erstellt. SSH-Signaturen binden außerdem einen Namespace (`file`, `git`, `email` …); eine Signatur, die unter einem anderen Namespace geprüft wird, scheitert schon vor der kryptografischen Prüfung mit „namespace does not match“. Auf jeden Fehler folgt „Could not verify signature.“ als weitere Zeile.
Warum der Fehler auftritt
Die geprüften Daten weichen von den signierten ab
häufigEine veränderte Datei, ein anderes Zeilenende (`\r\n` gegenüber `\n`), ein von einem Editor angehängter abschließender Zeilenumbruch oder die Prüfung der falschen Datei. SSHSIG signiert einen Hash der exakten Bytes.
Falscher Namespace
häufigMit `-n file` erstellte Signaturen lassen sich nicht mit `-n git` prüfen, und Git verwendet immer `git`. Namespaces verhindern, dass eine für einen Zweck erstellte Signatur für einen anderen wiederverwendet wird.
Identität oder Schlüssel nicht in allowed_signers
gelegentlich`-I` nennt einen Principal, den die Allowed-Signers-Datei nicht dem Signaturschlüssel zuordnet, oder der Schlüssel wurde rotiert, und die Datei führt noch den alten auf.
So behebst du den Fehler
- 1.
Exakte Bytes mit dem richtigen Namespace prüfen
Leite die Originaldatei per Pipe in `ssh-keygen -Y verify` und verwende den Namespace, mit dem signiert wurde. `find-principals` zeigt, welcher Identität der Schlüssel zugeordnet ist.
bash # Verify exactly the bytes that were signed, with the namespace used at signing time ssh-keygen -Y verify -f allowed_signers -I release@example.com -n file -s release.txt.sig < release.txt # Which principal does the allowed_signers file map this signature's key to? ssh-keygen -Y find-principals -f allowed_signers -s release.txt.sig - 2.
Kryptografie und Vertrauen getrennt prüfen
`check-novalidate` prüft die Signatur, ohne die Allowed-Signers-Datei heranzuziehen. Besteht sie diese Prüfung, liegt das Problem in der Zuordnung der Identität; scheitert sie, sind die Daten oder die Signatur falsch.
bash ssh-keygen -Y check-novalidate -n file -s release.txt.sig < release.txt # signature valid at all (no trust check)?
Verwandte Fehler
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh sign…Git (verify-commit, log --show-signature, merge --verify-signatures) with gpg.format=sshinvalid signature when validating ASN.1 encoded signatureSigstore cosign (verify-blob / verify with --key)gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]GnuPG (gpg --verify, git verify-commit / verify-tag)