
Implementing Sigstore for Software Signing
FreeSecurely sign and verify software artifacts without long-lived keys.
Free · Opens the source repo
What Implementing Sigstore for Software Signing does
Implementing Sigstore for Software Signing is a skill designed for developers and security professionals seeking to enhance the integrity of their software supply chains. This skill leverages Sigstore's capabilities, including keyless signing, to provide a streamlined approach to signing container images and software artifacts. By utilizing Cosign for signing, Rekor for transparency log verification, and Fulcio for certificate authority integration, users can establish a robust cryptographic provenance for their builds without the burden of managing long-lived cryptographic keys.
The skill is particularly beneficial in CI/CD workflows where establishing verifiable provenance is crucial. It supports OIDC-based identity binding, enabling developers to sign artifacts with ephemeral credentials tied to their identities. This not only simplifies the signing process but also enhances security by eliminating the risks associated with static keys. Additionally, users can query the Rekor transparency log to audit signing events, ensuring accountability and traceability in their software supply chain.
Implementing Sigstore is ideal for teams looking to enforce signed-image policies within Kubernetes environments. By integrating Sigstore verification into Kubernetes admission controllers, organizations can ensure that only signed images from trusted identities are deployed. This proactive approach to security helps mitigate risks associated with unverified software artifacts, making it a valuable addition to any security-conscious development pipeline.
However, this skill is not suitable for scenarios requiring offline signing or environments that cannot access the public Sigstore infrastructure. It also does not replace traditional PGP/GPG signing methods where specific regulatory compliance is required. Users should ensure their environments are compatible with the prerequisites outlined in the documentation before implementing this skill.
When to use it
Use this skill when you need to sign container images and software artifacts in CI/CD pipelines without managing static keys, or when you want to enforce signed-image policies in Kubernetes.
When not to use it
Avoid using this skill for offline signing workflows or in environments that cannot access Sigstore services, as well as when traditional key management procedures are mandated for compliance.
What you can build with it
Signing Container Images in CI/CD
Use this skill to automate the signing of container images in your CI/CD pipeline, ensuring that all images are verified and signed by trusted identities.
Enforcing Image Policies in Kubernetes
Integrate this skill into your Kubernetes admission controllers to enforce policies that only allow deployment of signed images, enhancing security.
Auditing Signing Events
Leverage the Rekor transparency log to audit and verify signing events, providing traceability and accountability for your software artifacts.
How to install Implementing Sigstore for Software Signing
View source1. Install with the skills CLI
npx skills add mukul975/anthropic-cybersecurity-skills/implementing-sigstore-for-software-signing --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by mukul975Implementing Sigstore for Software Signing
When to Use
- Signing container images and software artifacts without managing long-lived cryptographic keys
- Establishing verifiable provenance for build outputs in CI/CD pipelines using OIDC identity binding
- Querying the Rekor transparency log to audit when and by whom an artifact was signed
- Verifying that container images pulled from registries were signed by authorized identities and issuers
- Integrating Sigstore verification into Kubernetes admission controllers to enforce signed-image policies
Do not use for signing artifacts that require air-gapped or offline signing workflows where OIDC authentication is unavailable, for environments that cannot reach the public Sigstore infrastructure (Fulcio, Rekor) and have no private instance deployed, or as a replacement for traditional PGP/GPG signing where regulatory compliance mandates specific key management procedures.
Prerequisites
- Cosign CLI v2.4+ installed (
go install github.com/sigstore/cosign/v2/cmd/cosign@latestor binary release) - Access to an OIDC identity provider supported by Fulcio (Google, GitHub, Microsoft, or a custom OIDC issuer)
- Container registry credentials (for signing container images) with push access to store signature objects
- Python 3.9+ with
sigstore,requests, andcryptographypackages for the automation agent - Network access to
fulcio.sigstore.dev,rekor.sigstore.dev, andtuf-repo-cdn.sigstore.dev(or private Sigstore instance URLs)
Workflow
Step 1: Install and Configure Cosign
Install Cosign and verify it can reach the Sigstore infrastructure:
- Install from binary release: Download the appropriate binary from the Cosign GitHub releases page and verify its checksum. On Linux:
curl -LO https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 && chmod +x cosign-linux-amd64 && sudo mv cosign-linux-amd64 /usr/local/bin/cosign - Verify installation: Run
cosign versionto confirm the version and check connectivity to Sigstore services withcosign initializewhich fetches the TUF root of trust - Configure custom infrastructure (optional): If running a private Sigstore stack, set
--fulcio-url,--rekor-url, and--oidc-issuerflags or use environment variablesCOSIGN_REKOR_URLandCOSIGN_FULCIO_URL
Step 2: Keyless Signing with Cosign and Fulcio
Perform identity-based signing where Fulcio issues a short-lived certificate bound to your OIDC identity:
- Sign a container image: Run
cosign sign <IMAGE_DIGEST>which triggers an OIDC authentication flow. Cosign generates an ephemeral key pair, obtains a short-lived certificate from Fulcio binding the public key to the OIDC identity, signs the image digest, and records the signing event in Rekor. The private key is destroyed immediately after signing. - Sign a blob (file): Run
cosign sign-blob <file> --bundle artifact.sigstore.jsonto sign arbitrary files. The bundle contains the signature, certificate, timestamp, and Rekor inclusion proof. - Non-interactive signing in CI: Set
SIGSTORE_ID_TOKENenvironment variable with a valid OIDC token (e.g., from GitHub Actions OIDC or GCP workload identity) to skip the browser-based authentication flow:export SIGSTORE_ID_TOKEN=$(curl -sH "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \ "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=sigstore" | jq -r '.value') cosign sign $IMAGE_DIGEST - Supported OIDC providers: Google (
https://accounts.google.com), GitHub (https://github.com/login/oauth), Microsoft (https://login.microsoftonline.com), GitLab (https://gitlab.com), and custom providers registered with a private Fulcio instance
Step 3: Verify Signed Artifacts
Verify that artifacts were signed by expected identities from expected OIDC issuers:
- Verify a container image: Run
cosign verify <IMAGE_URI> --certificate-identity=name@example.com --certificate-oidc-issuer=https://accounts.google.comto confirm the image was signed by the specified identity. Cosign validates the certificate chain, checks the Rekor inclusion proof, and verifies the signature matches the current image digest. - Verify a signed blob: Run
cosign verify-blob <file> --bundle artifact.sigstore.json --certificate-identity=name@example.com --certificate-oidc-issuer=https://accounts.google.com - Regex matching for CI identities: Use
--certificate-identity-regexpto match CI workflow identities:cosign verify $IMAGE --certificate-identity-regexp="https://github.com/myorg/myrepo/.*" \ --certificate-oidc-issuer=https://token.actions.githubusercontent.com - Verification failure modes: Cosign returns a non-zero exit code on failure. Common failures include certificate identity mismatch, expired certificates without a valid Rekor timestamp, missing Rekor entry, and image digest mismatch (image was modified after signing).
Step 4: Query the Rekor Transparency Log
Search and verify entries in the Rekor transparency log to audit signing events:
- Search by email identity: Use
rekor-cli search --email user@example.comto find all signing events for an identity - Search by artifact hash: Use
rekor-cli search --sha sha256:<hash>to find signing events for a specific artifact - Retrieve and verify an entry: Use
rekor-cli get --uuid <entry_uuid>to retrieve full entry details including the certificate, signature, and artifact hash - Verify log inclusion: Use
rekor-cli verify --entry-uuid <uuid>to verify the entry's inclusion proof against the signed tree head, confirming the entry exists in the append-only log and has not been tampered with - REST API queries: Query
https://rekor.sigstore.dev/api/v1/index/retrievewith POST body{"hash": "sha256:<hash>"}to retrieve entry UUIDs, then fetch full entries from/api/v1/log/entries/<uuid> - Monitor for consistency: Use the rekor-monitor tool or Omniwitness to continuously verify the log remains append-only and entries are never mutated or removed
Step 5: Integrate into CI/CD Pipelines
Embed signing and verification into build and deployment pipelines:
- GitHub Actions: Use
sigstore/cosign-installeraction to install Cosign, then sign images using the GitHub OIDC token as the identity. The signing identity will be the workflow URL (e.g.,https://github.com/org/repo/.github/workflows/build.yml@refs/heads/main). - Kubernetes admission enforcement: Deploy Sigstore Policy Controller or Kyverno with Cosign verification policies to reject unsigned or incorrectly signed images at admission time
- Supply chain metadata: Use
cosign attestto attach in-toto attestations (SLSA provenance, SBOM, vulnerability scan results) to images, signed with the same keyless flow, enabling consumers to verify both the artifact and its build metadata
Key Concepts
| Term | Definition |
|---|---|
| Keyless Signing | Identity-based signing that uses short-lived certificates from Fulcio bound to OIDC identities instead of long-lived cryptographic keys, eliminating key management overhead |
| Fulcio | Sigstore's certificate authority that issues short-lived X.509 certificates after verifying OIDC tokens, binding an ephemeral public key to a verified identity |
| Rekor | Sigstore's immutable, append-only transparency log that records signing events with timestamps, enabling auditors to verify when and by whom an artifact was signed |
| Cosign | The primary CLI tool for signing and verifying container images and blobs using the Sigstore infrastructure (Fulcio + Rekor) |
| TUF Root of Trust | The Update Framework distribution mechanism for Sigstore's root CA certificate and Rekor public key, ensuring clients trust the correct Sigstore infrastructure |
| OIDC Identity Binding | The process where Fulcio verifies a user's identity through an OpenID Connect token and binds it to a short-lived signing certificate |
| Inclusion Proof | A cryptographic proof from Rekor demonstrating that a signing event entry exists within the transparency log's Merkle tree |
Tools & Systems
- Cosign: CLI tool for signing containers and blobs, verifying signatures, and attaching attestations using Sigstore keyless signing or traditional key-based signing
- Fulcio: Free root certificate authority for code signing certificates issued based on OIDC identity verification with a validity period of approximately 10 minutes
- Rekor: Transparency log server providing tamper-evident storage of signing metadata, searchable by identity, artifact hash, or public key
- Sigstore Policy Controller: Kubernetes admission webhook that enforces image signing policies by verifying Cosign signatures and attestations before allowing pod creation
- rekor-cli: Command-line client for querying, uploading, and verifying entries in the Rekor transparency log
Common Scenarios
Scenario: Securing a Container Image Build Pipeline with Keyless Signing
Context: A DevOps team builds container images in GitHub Actions and deploys to a Kubernetes cluster. They need to ensure only images built by their CI pipeline can be deployed, preventing supply chain attacks from compromised registries or unauthorized pushes.
Approach:
- Add
sigstore/cosign-installer@v3to the GitHub Actions workflow and enable OIDC token permissions withid-token: write - After building and pushing the image, sign it with
cosign sign $IMAGE_DIGESTusing the GitHub Actions OIDC identity automatically - Deploy Sigstore Policy Controller to the Kubernetes cluster with a ClusterImagePolicy requiring signatures from
--certificate-identity-regexp=https://github.com/myorg/myrepo/.*and--certificate-oidc-issuer=https://token.actions.githubusercontent.com - Verify the signing entry appears in Rekor by querying with the image digest hash to confirm the transparency log recorded the event
- Test the admission controller by attempting to deploy an unsigned image and confirming it is rejected with a policy violation error
Pitfalls:
- Signing the image tag instead of the digest (
cosign sign myimage:latestvscosign sign myimage@sha256:abc...) means verification breaks when the tag is updated to point to a different digest - Not pinning the
--certificate-oidc-issuerduring verification allows signatures from any OIDC provider to pass, defeating the purpose of identity binding - Forgetting to set
id-token: writepermission in GitHub Actions results in OIDC token retrieval failure and signing errors - Using
--certificate-identity-regexp=.*in production verification policies effectively disables identity verification
Output Format
## Sigstore Signing Verification Report
**Artifact**: ghcr.io/myorg/myapp@sha256:a1b2c3d4...
**Verification Status**: PASSED
**Certificate Details**:
Subject: https://github.com/myorg/myapp/.github/workflows/build.yml@refs/heads/main
Issuer: https://token.actions.githubusercontent.com
Valid From: 2026-03-19T10:00:00Z
Valid To: 2026-03-19T10:10:00Z
**Rekor Entry**:
UUID: 24296fb24b8ad77a8d52...
Log Index: 89234567
Integrated Time: 2026-03-19T10:00:05Z
Inclusion Proof: VERIFIED (tree size: 92000000, root hash: e4f5a6...)
**Policy Check**: Image signed by authorized CI workflow identity
Frequently asked questions about Implementing Sigstore for Software Signing
Similar skills
GitHub Actions Hardening
Enhance the security of your GitHub Actions workflows.
Sensitive Logging Audit
Audit and fix sensitive data exposure in Python logging.
Android App Static Analysis
Automate security assessments of Android apps with MobSF.
Integrating DAST with OWASP ZAP
Seamlessly integrate dynamic security testing into CI/CD pipelines.
Implementing Runtime Security with Tetragon
Enhance Kubernetes security with eBPF-based observability.
Implementing Mobile Application Management
Secure enterprise data on mobile devices with app-level controls.
