Mensagem de erro
--certificate-identity or --certificate-identity-regexp is required for verification in keyless mode
Também aparece como
- Error: --certificate-identity or --certificate-identity-regexp is required for verification in keyless mode
O cosign também exige `--certificate-oidc-issuer` (ou `--certificate-oidc-issuer-regexp`); a flag de identidade é verificada primeiro. O cosign 1.x aceitava a verificação keyless sem essas flags.
Sigstore cosign 2.x/3.x — verify / verify-blob / verify-attestation without --key
O que significa
Sem `--key`, o cosign verifica assinaturas “keyless” (sem chave): um certificado de curta duração emitido pelo Fulcio vincula a assinatura a uma identidade OIDC (um workflow de CI, um e-mail). Uma assinatura keyless válida só prova que *alguém* com *alguma* identidade assinou — por isso o cosign 2.0 e posteriores exigem que você diga de quem é a assinatura que aceita. O comando para antes de ler o bundle até você indicar a identidade e o emissor esperados.
Por que acontece
Comandos da documentação do cosign 1.x
comum`COSIGN_EXPERIMENTAL=1 cosign verify image` funcionava na 1.x e verificava qualquer identidade. Copiado para um pipeline com a 2.x/3.x, ele falha aqui.
Você ainda não sabe a identidade do signatário
comumA identidade é o SAN do certificado: no GitHub Actions, a URL do workflow com a ref; na assinatura interativa, um endereço de e-mail. Os projetos a documentam junto com as instruções de verificação.
Um artefato assinado com chave e verificado sem --key
ocasionalSe o artefato foi assinado com um par de chaves, passe `--key cosign.pub`; assim, nenhuma flag de identidade é necessária.
Como corrigir
- 1.
Fixar a identidade do workflow e o emissor
No GitHub Actions, o emissor é `https://token.actions.githubusercontent.com` e a identidade é o arquivo do workflow em uma 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.
Usar uma expressão regular ancorada para um conjunto de identidades
`--certificate-identity-regexp` permite aceitar todas as tags de um workflow. Ancore a expressão, ou o workflow de um fork pode corresponder a ela.
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.
Ler a identidade no certificado
O Subject Alternative Name do certificado do bundle é o valor a fixar — depois que você decidir que essa identidade é aquela em que você confia.
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