Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integration #270

Merged
merged 37 commits into from
Nov 21, 2023
Merged
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
fff2242
Create integration
jonvnadelberg Nov 5, 2023
1bf23ee
Update integration
jonvnadelberg Nov 5, 2023
dee1cf5
Update integration
jonvnadelberg Nov 5, 2023
4da1b9d
Create integration.md
jonvnadelberg Nov 5, 2023
f39a7e9
Update integration.md
jonvnadelberg Nov 5, 2023
a1bf074
Delete content/en/about/integration
jonvnadelberg Nov 5, 2023
ce4e12f
Update integration.md
jonvnadelberg Nov 5, 2023
f0e3432
Update integration.md
jonvnadelberg Nov 5, 2023
d57908d
fix links
jonvnadelberg Nov 9, 2023
197c877
link work
jonvnadelberg Nov 9, 2023
33c3055
Merge branch 'sigstore:main' into integration
jonvnadelberg Nov 9, 2023
7cd61a7
Update and rename integration.md to integration.md
jonvnadelberg Nov 10, 2023
d549a97
Update integration.md
jonvnadelberg Nov 10, 2023
58697e3
Update integration.md
jonvnadelberg Nov 10, 2023
f1e5270
Update integration.md
jonvnadelberg Nov 10, 2023
26cc7a0
Update integration.md
jonvnadelberg Nov 10, 2023
b827b83
Update integration.md
jonvnadelberg Nov 10, 2023
3c2b405
Update integration.md
jonvnadelberg Nov 10, 2023
5dfd9d8
Update integration.md
jonvnadelberg Nov 10, 2023
40fc840
Update integration.md
jonvnadelberg Nov 10, 2023
f4ac698
Update integration.md
jonvnadelberg Nov 10, 2023
df2399a
Update integration.md
jonvnadelberg Nov 10, 2023
8516d82
Update integration.md
jonvnadelberg Nov 10, 2023
5284a97
Update integration.md
jonvnadelberg Nov 10, 2023
75c05b3
Merge branch 'sigstore:main' into integration
jonvnadelberg Nov 14, 2023
de3181e
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
da52b36
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
e10ecf5
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
2a5c3ff
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
dc8acc2
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
ef1a666
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
c994cfd
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
1db38c9
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
a62a641
Update content/en/system_config/integration.md
jonvnadelberg Nov 15, 2023
be01afc
Update integration.md
jonvnadelberg Nov 15, 2023
dd85455
Update integration.md
jonvnadelberg Nov 15, 2023
6053b53
Update integration.md
jonvnadelberg Nov 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions content/en/system_config/integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
type: docs
category: System configuration
title: Integration
weight: 952
---

![Sigstore](sigstore-logo_horizontal-color.svg)

## Integration

One of the key tenets of the Sigstore community’s strategy has been to focus on open source package managers as our primary stakeholders. OSS package managers serve as a critical link in the overall software supply chain, both in the distribution of artifacts and metadata, but also often as an implicitly trusted actor that is expected to curate content based on static and transient information. Package managers also typically create command line tools used to download, install and manage packages on systems in a variety of environments.

A package manager looking to adopt Sigstore as part of its artifact signing and verification workflows will generally follow these steps, adjusted appropriately to the nuances of the specific programming language and/or ecosystem:

1. Develop language-specific implementation of Sigstore’s signing and verification workflows (if one does not already exist)
2. Integrate language-specific Sigstore signing and verification functionality into package management tooling
3. Add support for storing Sigstore signatures and attestations in the package registry for consumers to access
4. Publish community RFC proposal describing end-to-end workflows, ecosystem-specific threat model, and roadmap for adoption
5. Once RFC proposal is approved per community norms, drive implementation plan
6. Work to drive initial package adoption strategy; this often involves highly visible or valuable packages that can serve as references for other package maintainers within the ecosystem
7. Work with popular build and packaging extensions (like GoReleaser, JReleaser) and builder templates (Jenkins plugins, GitHub Actions)
8. Release all code and service extensions required for Sigstore support in a fully-supported mode
9. Presuming success to this point, set date for mandating Sigstore signing and verification for all packages in ecosystem

Check failure on line 24 in content/en/system_config/integration.md

View workflow job for this annotation

GitHub Actions / markdownlint

Trailing spaces

content/en/system_config/integration.md:24:123 MD009/no-trailing-spaces Trailing spaces [Expected: 0 or 2; Actual: 3] https://github.com/DavidAnson/markdownlint/blob/v0.29.0/doc/md009.md

Integrating Sigstore with your own applications provides an effective way to enhance security:

- The ability to control how Sigstore is used.
- The creation of your own user interfaces.
- Package integrity.
- Key management unnecessary.
- Transparency.

You can achieve these enhancements in your application while using the underlying Sigstore software that already exists.

There are several libraries available for developers who want to integrate Sigstore signing and/or verification into their project:

- [Cosign](https://github.com/sigstore/cosign) is a legacy system that still should be used for signing, and Sigstore-go, which is recommended for use in verification. Cosign was developed with a focus on container image signing and verification, and has a rich CLI and a long legacy of features and development.
- [Sigstore-go](https://github.com/sigstore/sigstore-go) is a more minimal and friendly API for integrating Go code with Sigstore, with a focus on a unified format for Sigstore verification metadata.
- [Sigstore-python](https://github.com/sigstore/sigstore-python) is a python language based API.
- [Sigstore-js](https://github.com/sigstore/sigstore-js) is for code signing NPM packages
- [Sigstore-java](https://github.com/sigstore/sigstore-java) is for Java based applications (pre-release).
- [Sigstore-rs](https://github.com/sigstore/sigstore-rs) is for Rust applications (pre-release).

**NOTE:** Each of the above libraries has their own entry points. Refer to the specific documentation of each library for details. You can also get support on Slack at the "#clients" channel.
jonvnadelberg marked this conversation as resolved.
Show resolved Hide resolved

In addition to the individual libraries, a work-in-progress client specification describes the expected signer and verifier flows. You can find it [here](https://docs.google.com/document/d/1kbhK2qyPPk8SLavHzYSDM8-Ueul9_oxIMVFuWMWKz0E/edit#heading=h.xib7qycxsp4i). Join https://groups.google.com/g/sigstore-dev to get access.

### Cosign

[Cosign documentation and examples](https://github.com/sigstore/cosign/blob/main/doc/cosign.md) are available. A few relevant functions:

- For [verifying containers](https://github.com/sigstore/cosign/blob/b309a0f048462b3fcecb1ac721db537a9cc90372/pkg/cosign/verify.go#L479) [or here](https://github.com/sigstore/cosign/blob/b309a0f048462b3fcecb1ac721db537a9cc90372/pkg/cosign/verify.go#L818).
- For [verifying blobs](https://github.com/sigstore/cosign/blob/b309a0f048462b3fcecb1ac721db537a9cc90372/pkg/cosign/verify.go#L812). Note that it's up to the caller to construct the function input structure.
- For [signing blobs](https://github.com/sigstore/cosign/blob/b309a0f048462b3fcecb1ac721db537a9cc90372/cmd/cosign/cli/sign/sign_blob.go#L40).
- For [signing containers](https://github.com/sigstore/cosign/blob/b309a0f048462b3fcecb1ac721db537a9cc90372/cmd/cosign/cli/sign/sign.go#L133).

These functions were designed to be used within Cosign as a command line utility and not as an API. There are no API stability guarantees for Cosign, and we do not follow semantic versioning (semver). Note that we do not recommend Cosign for integration, as it will pull in a lot of dependencies that will cause your application to increase in size.

Also note that Cosign lacks support for the Protobufs-based bundle format.

### Sigstore-go

The Sigstore-go library represents the future of Sigstore’s support for the Go programming language. It supports the Protobufs-based bundle format, and is a lightweight software package that is much simpler than Cosign. Cosign is focused on OCI use cases, which makes it difficult for library integrators who want to limit their implementations to core sign/verify flows. It can be used today as a smaller alternative than depending on Cosign’s internal libraries (which can come with potentially unnecessary transitive dependencies), and provides the basis for Sigstore bundle support in the policy controller. Cosign was designed as a CLI for signing containers, and Sigstore-go is designed as an API.

Sigstore-go can be found [here](https://github.com/sigstore/sigstore-go). [Examples](https://github.com/sigstore/sigstore-go#examples) are also available.

### Sigstore-python

The Sigstore-python library is an interface for the Python programming language. Examine the [repository](https://github.com/sigstore/sigstore-python) for more information.

### Sigstore-js

The Sigstore-js library is designed for code signing NPM packages. See the [repository](https://github.com/sigstore/sigstore-js) for more information.
Loading