Fehlermeldung
--certificate-identity or --certificate-identity-regexp is required for verification in keyless mode
Auch ausgegeben als
- Error: --certificate-identity or --certificate-identity-regexp is required for verification in keyless mode
cosign verlangt außerdem `--certificate-oidc-issuer` (oder `--certificate-oidc-issuer-regexp`); das Flag für die Identität wird zuerst geprüft. cosign 1.x hat die schlüssellose Prüfung ohne diese Flags akzeptiert.
Sigstore cosign 2.x/3.x — verify / verify-blob / verify-attestation without --key
Was der Fehler bedeutet
Ohne `--key` prüft cosign „schlüssellose“ Signaturen (Keyless Signing): Ein kurzlebiges Zertifikat von Fulcio bindet die Signatur an eine OIDC-Identität (einen CI-Workflow, eine E-Mail-Adresse). Eine gültige schlüssellose Signatur beweist nur, dass *irgendjemand* mit *irgendeiner* Identität signiert hat – deshalb verlangen cosign 2.0 und neuer, dass du angibst, wessen Signatur du akzeptierst. Der Befehl bricht ab, bevor er das Bundle liest, solange du die erwartete Identität und den erwarteten Aussteller nicht nennst.
Warum der Fehler auftritt
Befehle aus der Dokumentation von cosign 1.x
häufig`COSIGN_EXPERIMENTAL=1 cosign verify image` hat in 1.x funktioniert und dabei jede beliebige Identität gelten lassen. In eine Pipeline mit 2.x/3.x kopiert, scheitert der Befehl genau hier.
Du kennst die Identität des Signierers noch nicht
häufigDie Identität ist der SAN des Zertifikats: bei GitHub Actions die URL des Workflows samt Ref, beim interaktiven Signieren eine E-Mail-Adresse. Projekte dokumentieren sie neben ihren Anleitungen zur Prüfung.
Ein mit einem Schlüssel signiertes Artefakt, geprüft ohne --key
gelegentlichWurde das Artefakt mit einem Schlüsselpaar signiert, übergib `--key cosign.pub`; dann sind keine Identitäts-Flags nötig.
So behebst du den Fehler
- 1.
Identität des Workflows und Aussteller festlegen
Bei GitHub Actions ist der Aussteller `https://token.actions.githubusercontent.com`, und die Identität ist die Workflow-Datei an einem bestimmten Ref.
bash # Artifacts signed in GitHub Actions: identity = workflow file at a ref, issuer = GitHub's OIDC issuer cosign verify-blob \ --bundle app.sigstore.json \ --certificate-identity "https://github.com/acme/app/.github/workflows/release.yml@refs/tags/v1.4.2" \ --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \ app.tar.gz - 2.
Für Bereiche einen verankerten regulären Ausdruck verwenden
Mit `--certificate-identity-regexp` kannst du alle Tags eines Workflows akzeptieren. Verankere den Ausdruck, sonst passt womöglich auch der Workflow eines Forks.
bash # Any release tag of that workflow - anchor the expression cosign verify ghcr.io/acme/app:1.4.2 \ --certificate-identity-regexp '^https://github\.com/acme/app/\.github/workflows/release\.yml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com - 3.
Identität aus dem Zertifikat lesen
Der Subject Alternative Name des Zertifikats im Bundle ist der Wert, den du festlegst – nachdem du entschieden hast, dass dies die Identität ist, der du vertraust.
bash # Read the identity recorded in the signing certificate of a bundle jq -r '.verificationMaterial.certificate.rawBytes' app.sigstore.json | base64 -d \ | openssl x509 -inform DER -noout -ext subjectAltName