Zum Inhalt springen
ecdsa.com
Sigstore cosign 2.x/3.xWeitere Tools

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

So behebst du den Fehler

  1. 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. 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. 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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen