Software supply chain attacks have grown exponentially in recent years. Compromised packages, tampered container images, and unauthorized code modifications threaten every organization that builds and deploys software. Self-hosted supply chain security tools give you full control over artifact signing, verification, and provenance — without trusting third-party SaaS platforms.
This guide compares three leading open-source frameworks for supply chain integrity: Sigstore (Cosign), Notation (Notary v2), and in-toto. Each takes a different approach to securing the software supply chain, and understanding their strengths helps you choose the right tool for your infrastructure.
Why Self-Host Your Supply Chain Security?
Most cloud-based signing services require you to store private keys or trust remote infrastructure. For organizations with strict compliance requirements, regulatory obligations, or air-gapped environments, self-hosted signing and verification is essential.
Self-hosting supply chain security tools gives you:
- Full key control — private keys never leave your infrastructure
- Air-gapped compatibility — works in environments with no internet access
- Auditability — every signing event is logged on your own systems
- No vendor lock-in — migrate between registries and CI systems freely
- Custom policies — define signing requirements specific to your workflows
For a broader view of container security, see our container vulnerability scanning guide and self-hosted SBOM pipeline tutorial — supply chain signing works best alongside scanning and SBOM generation.
Understanding the Landscape: Three Approaches
The three tools covered here represent distinct philosophies:
| Aspect | Sigstore/Cosign | Notation (Notary v2) | in-toto |
|---|---|---|---|
| Primary Goal | Code signing + transparency log | OCI artifact signing | End-to-end supply chain integrity |
| Key Management | OIDC-based (keyless) or local keys | X.509 certificates + KMS | Link certificates + root layout |
| Verification Model | Transparency log (Rekor) | Registry-based (notation) | Step-by-step provenance verification |
| Artifact Types | Containers, binaries, files | OCI artifacts (containers, Helm charts) | Any file, any build step |
| OCI Compliance | Yes (cosign attest/sign) | Yes (native OCI spec) | No (external framework) |
| Best For | CI/CD pipelines, container signing | kubernetes, OCI registries | Multi-step build pipelines, compliance |
| Language | Go | Go | Python |
| GitHub Stars | 5,834 (cosign) | 477 (notation) | 994 (in-toto) |
| Last Active | April 2026 | March 2026 | April 2026 |
Sigstore/Cosign: Signing + Transparency
Sigstore is a CNCF project that provides code signing and transparency for containers and binaries. Cosign is the flagship CLI tool.
Key Features
- Keyless signing — uses short-lived OIDC certificates, no persistent private keys to manage
- Transparency log — every signature is recorded in Rekor, an append-only public ledger
- Fulcio CA — ephemeral certificate authority binds identities to signatures
- Container-native — designed from the ground up for OCI image signing
Installation
| |
Docker Compose Deployment (Self-Hosted Fulcio + Rekor)
For fully self-hosted deployments, Sigstore provides components you can run on your own infrastructure:
| |
Signing and Verifying a Container Image
| |
Attestations (SBOM, Provenance)
Cosign supports attaching attestations to images:
| |
Notation (Notary v2): OCI-Native Artifact Signing
Notation is the CNCF Notary v2 project — a CLI tool for signing and verifying OCI artifacts (containers, Helm charts, WASM modules). It is the successor to Docker Notary, rebuilt to align with the OCI distribution specification.
Key Features
- OCI-native — works directly with OCI registries using the standard distribution API
- X.509 certificates — uses standard PKI infrastructure for key management
- Multi-registry support — Docker Hub, Harbor, ECR, ACR, and any OCI-compliant registry
- Policy-driven verification — define trust policies per registry and namespace
- Kubernetes integration — Ratify admission controller verifies signatures before deployment
Installation
| |
Docker Compose Deployment
Notation itself is a CLI tool, but for a self-hosted PKI backend you can deploy a certificate authority:
| |
Signing and Verifying with Notation
| |
in-toto: End-to-End Supply Chain Integrity
in-toto is a framework that protects the entire software supply chain, not just the final artifact. It verifies that every step in the build process was performed correctly and by authorized personnel.
Key Features
- Step-by-step verification — each build step is cryptographically recorded
- Root layout — defines the expected supply chain workflow
- Link metadata — each step produces a signed “link” file documenting what was done
- Language-agnostic — works with any build system, any language
- SLSA alignment — in-toto is the reference implementation for SLSA provenance
Installation
| |
Defining a Supply Chain Layout
The root layout defines the expected steps:
| |
Running the in-toto Pipeline
| |
Comparison: Which Tool Should You Choose?
| Criterion | Cosign | Notation | in-toto |
|---|---|---|---|
| Setup Complexity | Low | Medium | High |
| Key Management | Keyless (OIDC) or local keys | X.509 PKI | Custom key pairs |
| Registry Integration | Good (OCI) | Excellent (OCI-native) | None (external) |
| Kubernetes Support | Via Kyverno/Gatekeeper | Via Ratify admission controller | Via custom controllers |
| Transparency | Public Rekor log | Private to registry | Link files per step |
| Build Step Tracking | No (signs final artifact) | No (signs final artifact) | Yes (tracks every step) |
| CI/CD Integration | Excellent (GitHub Actions, GitLab) | Good (Azure, GitHub) | Manual or scripted |
| Compliance Ready | Good | Good | Excellent (auditable chain) |
| Learning Curve | Low | Medium | High |
| Community Size | Large (CNCF) | Growing (CNCF) | Niche but active |
Decision Matrix
Choose Cosign if you need quick container signing with minimal setup. Its keyless mode eliminates key management overhead, and the transparency log provides public accountability. Best for teams already using GitHub Actions or GitLab CI.
Choose Notation if you are building on OCI registries and Kubernetes. Its native OCI compliance and Ratify admission controller make it the strongest choice for Kubernetes-native workflows. Ideal if you already use Harbor or ACR.
Choose in-toto if you need end-to-end supply chain verification across multiple build steps. It is the most comprehensive option for compliance-heavy environments (SOC 2, ISO 27001) where every step must be auditable.
Building a Complete Self-Hosted Pipeline
For maximum security, combine multiple tools. A production-grade pipeline might use:
- in-toto for build step verification during CI
- Cosign for signing the final container image
- Notation for registry-level signature verification before Kubernetes deployment
- Trivy for vulnerability scanning (see our vulnerability scanner comparison)
- Syft + Dependency-Track for SBOM generation and tracking (see our SBOM pipeline guide)
| |
Verification at Deployment Time
Regardless of which signing tool you choose, verification at deployment time is critical. Here is how to enforce signature verification in Kubernetes:
With Notation + Ratify
| |
With Cosign + Kyverno
| |
Conclusion
Self-hosted supply chain security is no longer optional — it is a baseline requirement for any organization shipping software. Cosign, Notation, and in-toto each solve different parts of the puzzle:
- Cosign provides the easiest path to signed containers with transparency
- Notation offers the deepest OCI registry integration
- in-toto delivers comprehensive step-by-step supply chain verification
For most teams, starting with Cosign for container signing and adding Notation for Kubernetes enforcement is the most practical path. For regulated industries, in-toto provides the audit trail that compliance frameworks demand.
FAQ
What is the difference between Cosign and Docker Notary?
Cosign is a CNCF project designed for container signing with a transparency log. Docker Notary (v1) was Docker’s original signing tool, now deprecated. Notation (Notary v2) is the official successor, rebuilt as a CNCF project with native OCI distribution support.
Do I need to self-host all Sigstore components?
No. Cosign can use the public Sigstore infrastructure (Fulcio CA, Rekor transparency log) without self-hosting anything. However, for air-gapped environments or organizations that cannot trust public infrastructure, Fulcio and Rekor can be deployed on your own servers using the Docker Compose configuration provided above.
Can I use multiple signing tools together?
Yes. Many organizations use Cosign for CI/CD signing and Notation for registry-level verification. They operate at different layers — Cosign signs the image content, while Notation stores signatures in the OCI registry’s manifest index. Using both provides defense in depth.
How does in-toto differ from SLSA?
in-toto is the reference implementation for SLSA (Supply-chain Levels for Software Artifacts) provenance. SLSA defines a framework and maturity levels; in-toto provides the cryptographic tooling to implement it. You can think of SLSA as the standard and in-toto as the implementation.
Is keyless signing (Cosign) secure for production?
Keyless signing uses short-lived OIDC certificates (typically valid for 10 minutes) tied to your identity provider. This is considered more secure than persistent private keys because there are no long-lived secrets to steal. The signature is permanently recorded in Rekor’s transparency log, providing non-repudiation.
Which tool integrates best with Harbor registry?
Notation has the deepest Harbor integration, as Harbor natively supports Notary v2 signatures. Cosign also works well with Harbor. Both can be configured to enforce signature verification before images are pulled.
Can these tools sign non-container artifacts?
Yes. Cosign can sign binaries, files, and Helm charts. Notation supports any OCI artifact type. in-toto can track any build step regardless of artifact type. The key difference is the verification model, not the supported formats.
How do I rotate signing keys with each tool?
With Cosign keyless mode, there are no persistent keys to rotate — each signing session generates a fresh certificate. With local Cosign keys, replace the key pair and re-sign all images. With Notation, rotate your X.509 certificates through your CA and update the trust policy. With in-toto, generate new key pairs and update the root layout with new key IDs.