Appendix: disconnected transfer
This page is a simulated media drop, not an exercise. Nothing to pass here. The claim stays on the network.
The scored key-based signature is 5.3 (~/lab-trust). This appendix is what you would carry to a verifier that cannot reach Fulcio or the TUF Route.
Honesty
Say this in the room: RHDP cannot do air-gap physics. You still walk the file list consultants use on a real diode: TUF root, Fulcio CA, Rekor public key, the app public key from 5.3, digest, SBOM.
What would go on the media
| Artifact | Why a disconnected verifier needs it | Where you get it here |
|---|---|---|
TUF |
Keyless verify without the live TUF Route |
|
Fulcio CA PEM |
Keyless identity / admission materials |
Secret |
Rekor public key |
Transparency log verify when a tlog exists |
Same Secret |
|
Key-based verify from 5.3 |
|
App digest |
What you verify (the 5.1 BuildConfig image) |
ImageStream in |
SBOM (optional) |
Inventory on the far side of the diode |
4.4 / 7.1 workspace or TPA export |
Do not put cosign.key on the drop. Public key only.
Simulated drop: ~/media-drop
Create the folder. Copy the files. List them. That is the whole “transfer.”
mkdir -p ~/media-drop
TUF="$(oc -n trusted-artifact-signer get configmap demo-userinfo-rhtas -o jsonpath='{.data.tuf_url_hint}')"
curl -fsSk -o ~/media-drop/root.json "${TUF}/root.json"
oc -n tssc-admission extract secret/rhtas-tuf-keys \
--keys=fulcio_v1.crt.pem --keys=rekor.pub \
--to ~/media-drop --confirm
if [[ -f ~/lab-trust/cosign.pub ]]; then
cp ~/lab-trust/cosign.pub ~/media-drop/cosign.pub
else
echo 'Run 5.3 first so cosign.pub exists'
fi
BUILD_NS="$(oc -n gitea get configmap demo-userinfo-gitea -o jsonpath='{.data.student_build_namespace}')"
oc -n "${BUILD_NS}" get istag spring-boot-lw-poc:latest \
-o jsonpath='{.image.dockerImageReference}' > ~/media-drop/app-digest.txt
ls -l ~/media-drop
Expect root.json, fulcio_v1.crt.pem, rekor.pub, cosign.pub (after 5.3), and app-digest.txt. Do not git add this folder. Do not paste PEMs into Gitea.
A customer drop would also include the image layers (oc-mirror / skopeo copy to media). This claim already has the image in the in-cluster registry — you record the digest instead of writing a tarball.
Far-side verify (talking, then optional)
On a real diode, the far side would cosign initialize from the copied TUF root for keyless artifacts, and cosign verify --key cosign.pub for the 5.3 signature. You already ran --key verify in 5.3 against the live registry. Repeating it from ~/media-drop/cosign.pub is optional practice:
# Optional — same Check as 5.3, public key from the drop folder.
BUILD_NS="$(oc -n gitea get configmap demo-userinfo-gitea -o jsonpath='{.data.student_build_namespace}')"
IMAGE="image-registry.openshift-image-registry.svc:5000/${BUILD_NS}/spring-boot-lw-poc:latest"
cosign verify --key ~/media-drop/cosign.pub \
--insecure-ignore-tlog \
--allow-http-registry --allow-insecure-registry \
"${IMAGE}"
That still talks to the in-cluster registry. It does not prove air-gap.
What not to say
-
Do not say this cluster is disconnected or that
~/media-dropis a diode. -
Do not skip 5.3 and call the drop the Check.
-
Do not commit private keys or
workshop_passwordinto the drop or Git.
Related
-
5.3 Disconnected verify — scored
--keysign + verify -
5.1 Sign (keyless) — connected Fulcio path