Skip to main content
Version: 1.1

Validating ORAS CLI Binaries

Every ORAS release ships a checksums file, oras_<version>_checksums.txt, together with a detached GPG signature, oras_<version>_checksums.txt.asc. To validate a binary, check the signature of the checksums file, then check your download against the checksums file.

Newer releases are signed automatically by the release workflow with the ORAS Project Release Signing key (C6FC42F0DE84A345FAADB742F44418110791EF37). Earlier releases were signed manually with the key of an individual maintainer. All of these keys are listed in the KEYS file.

The following steps use v1.3.4 on linux_amd64 as an example. Replace the version and platform with the ones you downloaded.

Step 1: Import the release keys​

$ curl -sSL https://raw.githubusercontent.com/oras-project/oras/refs/heads/main/KEYS | gpg --import -

Step 2: Check the imported keys​

$ gpg --list-keys

The output lists every key in the KEYS file. Check that it includes the ORAS Project Release Signing key:

pub ed25519 2026-07-13 [SC]
C6FC42F0DE84A345FAADB742F44418110791EF37
uid [ unknown] ORAS Project Release Signing <cncf-oras-maintainers@lists.cncf.io>

Some maintainer keys in the file have expired. See Expired keys below.

Step 3: Verify the checksums file​

Download oras_1.3.4_checksums.txt and oras_1.3.4_checksums.txt.asc from the release, then run:

$ gpg --verify oras_1.3.4_checksums.txt.asc oras_1.3.4_checksums.txt
gpg: Signature made Thu Aug 27 19:35:31 2026 UTC
gpg: using EDDSA key C6FC42F0DE84A345FAADB742F44418110791EF37
gpg: Good signature from "ORAS Project Release Signing <cncf-oras-maintainers@lists.cncf.io>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: C6FC 42F0 DE84 A345 FAAD B742 F444 1811 0791 EF37

The Good signature line confirms the checksums file is authentic. The WARNING lines only mean that you have not marked the key as trusted in your local keyring; they do not mean that verification failed.

Step 4: Verify your download against the checksums file​

Put the archive you downloaded in the same directory and run:

$ sha256sum --ignore-missing -c oras_1.3.4_checksums.txt
oras_1.3.4_linux_amd64.tar.gz: OK

On macOS, use shasum -a 256 --ignore-missing -c oras_1.3.4_checksums.txt.

Verifying a single artifact​

Each archive and each SBOM (.sbom.json) in a release also has its own .asc signature. You can verify one directly:

$ gpg --verify oras_1.3.4_linux_amd64.tar.gz.asc oras_1.3.4_linux_amd64.tar.gz

Expired keys​

A key that has since expired still validates signatures it made while it was valid. For example, v1.3.0 was signed with a maintainer key that has now expired:

$ gpg --verify oras_1.3.0_checksums.txt.asc oras_1.3.0_checksums.txt
gpg: Signature made Mon Sep 8 04:49:30 2025 UTC
gpg: using ECDSA key 3E94D52AFA465877CAEA79F1E8052EA17ECB9A6C
gpg: Good signature from "Lixia (Sylvia) Lei <lixlei@microsoft.com>" [expired]
gpg: Note: This key has expired!
Primary key fingerprint: 3E94 D52A FA46 5877 CAEA 79F1 E805 2EA1 7ECB 9A6C

The Good signature line is what matters. The Note: This key has expired! line is not a verification failure.