The identity or issuer you are matching is not the one that signed
CommonThe signature exists and is valid; it simply was not made by the identity in your flags. A workflow moved to a different repository or ref, the signing job was renamed, or the issuer is written as one of the several forms a provider can present. cosign compares these as strings, so near enough is not enough.
Confirm
cosign verify <image> --certificate-identity-regexp '.*' --certificate-oidc-issuer-regexp '.*'
Whether verification now succeeds. If it does, a signature exists and the identity you were matching is the thing that was wrong
Fix
- Read the identity out of the signature rather than constructing it: the regexp form above prints the certificate subject that actually signed.
- Match that exact value, or a regexp deliberately anchored to it — not a wildcard left in place after debugging.
- If signing moved between repositories or refs, the identity changed with it and the verification side has to change too.
cosign verify <image> --certificate-identity '<exact subject from above>' --certificate-oidc-issuer '<exact issuer>'