Skip to content

Add crun.keyring with the release signing keys - #2260

Open
kolyshkin wants to merge 4 commits into
containers:mainfrom
kolyshkin:keyring
Open

kolyshkin wants to merge 4 commits into
containers:mainfrom
kolyshkin:keyring

Conversation

@kolyshkin

@kolyshkin kolyshkin commented Sep 15, 2026

Copy link
Copy Markdown
Collaborator

Release artifacts are GPG-signed, but the repository has no record of which keys are allowed to sign them, so users (and distributions) have no trusted way to verify the .asc files. This follows what runc does with runc.keyring.

  • crun.keyring: public keys of the release managers, each block tagged with a github=<user> comment. It has @giuseppe's key (primary AC404C1C0BF735C63FF4D562263D6DF2E163E1EA, taken from https://github.com/giuseppe.gpg; the 1.29.1 tag and release artifacts verify against it) and @kolyshkin's key (C2428CD75720FACDCF76B6EA17DE5ECB75A1100E, same as in runc.keyring).
  • README.md: a "Releases" section explaining how to verify an artifact.
  • build-aux/keyring_validate.sh (make validate-keyring), run in CI: checks that every (sub)key in the keyring belongs to the GitHub user named in its comment.
  • build-aux/release.sh: before building, check that the default signing key verifies against crun.keyring.
  • The keyring is shipped in the release tarballs.
  • rpm/crun.spec: verify the release tarball signature in %prep with %gpgverify. The keyring is synced to dist-git via Packit files_to_sync rather than downloaded from the release. Verification is skipped for Copr (git snapshot) builds, which have no signature; the Packit Copr builds on this PR will show whether that condition holds for the SRPM stage too.

@giuseppe, please confirm this is the key you want to use for signing releases (or push the right one). Other maintainers who cut releases can add theirs.

Release artifacts are signed with GPG, but there is no record in the
repository of which keys are allowed to sign them, so users have no
trusted way to verify the signatures.

Add crun.keyring listing the keys of the release managers, and document
how to verify a release in README.md.  The keyring is also shipped in
the release tarballs, so distributions can use it.

Each key block carries a "github=<user>" comment.  Add
build-aux/keyring_validate.sh (also available as "make
validate-keyring") and run it in CI to check that every (sub)key in
the keyring is one of the keys that user publishes on GitHub.

Signed-off-by: Kir Kolyshkin <[email protected]>
Before starting the build, make sure the default GPG key can sign, and
that the signature can be verified with the keys in crun.keyring.
Otherwise the release would be signed with a key users cannot verify.

Signed-off-by: Kir Kolyshkin <[email protected]>
Verify the signature of the release tarball in %prep using %gpgverify
and the keys from crun.keyring.

The keyring is synced to dist-git by Packit rather than downloaded from
the release, so that whoever can replace the release assets cannot also
replace the keyring.

Copr builds made from git snapshots have no signature, so skip the
verification there.

Signed-off-by: Kir Kolyshkin <[email protected]>

@giuseppe giuseppe left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, this is the key I use

LGTM

@kolyshkin
kolyshkin marked this pull request as ready for review September 15, 2026 22:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants