Message d’erreur
--certificate-identity or --certificate-identity-regexp is required for verification in keyless mode
Également affiché sous la forme
- Error: --certificate-identity or --certificate-identity-regexp is required for verification in keyless mode
cosign exige aussi `--certificate-oidc-issuer` (ou `--certificate-oidc-issuer-regexp`) ; l’option d’identité est vérifiée en premier. cosign 1.x acceptait la vérification sans clé sans ces options.
Sigstore cosign 2.x/3.x — verify / verify-blob / verify-attestation without --key
Ce que cela signifie
Sans `--key`, cosign vérifie des signatures « keyless » (sans clé) : un certificat à courte durée de vie émis par Fulcio lie la signature à une identité OIDC (un workflow de CI, une adresse e-mail). Lorsqu’elle est valide, une signature sans clé prouve seulement que *quelqu’un*, avec *une identité quelconque*, a signé ; c’est pourquoi cosign 2.0 et les versions ultérieures exigent que vous indiquiez de qui vous acceptez la signature. La commande s’arrête avant de lire le bundle tant que vous n’avez pas indiqué l’identité et l’émetteur attendus.
Pourquoi cela se produit
Commandes tirées de la documentation de cosign 1.x
fréquente`COSIGN_EXPERIMENTAL=1 cosign verify image` fonctionnait en 1.x et vérifiait n’importe quelle identité. Copiée dans un pipeline 2.x/3.x, cette commande échoue ici.
Vous ne connaissez pas encore l’identité du signataire
fréquenteL’identité est le SAN du certificat : pour GitHub Actions, l’URL du workflow avec sa référence Git ; pour une signature interactive, une adresse e-mail. Les projets la documentent à côté de leurs instructions de vérification.
Un artefact signé avec une clé, vérifié sans --key
occasionnelleSi l’artefact a été signé avec une paire de clés, passez `--key cosign.pub` ; aucune option d’identité n’est alors nécessaire.
Comment corriger l’erreur
- 1.
Fixer l’identité du workflow et l’émetteur
Pour GitHub Actions, l’émetteur est `https://token.actions.githubusercontent.com` et l’identité est le fichier de workflow à une référence Git donnée.
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.
Utiliser une expression régulière ancrée pour accepter une plage d’identités
`--certificate-identity-regexp` permet d’accepter tous les tags d’un même workflow. Ancrez l’expression, sinon le workflow d’un fork peut correspondre.
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.
Lire l’identité dans le certificat
Le nom alternatif du sujet (Subject Alternative Name) du certificat du bundle est la valeur à fixer – une fois que vous avez décidé que cette identité est bien celle à laquelle vous faites confiance.
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