Requisitos previos
Antes de iniciar esta guía, debes generar atestaciones de artefactos para tus compilaciones. Consulta Uso de atestaciones de artefactos para establecer la procedencia de las compilaciones.
Paso 1: Descargar la agrupación de atestaciones
Primero, obtenga el paquete de atestación desde la API de atestación.
Puede hacerlo con el siguiente comando desde una máquina que esté en línea:
gh attestation download PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME
gh attestation download PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME
Esta es la salida de ejemplo de ese comando:
Wrote attestations to file sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl.
Any previous content has been overwritten
The trusted metadata is now available at sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl
Paso 2: Descargar raíces de confianza
A continuación, obtenga el material de clave de las raíces de confianza.
Las atestaciones de artefacto usan la instancia pública de Sigstore para los repositorios públicos y la instancia de Sigstore de GitHub para los repositorios privados. Puede usar un comando para obtener ambas raíces de confianza:
gh attestation trusted-root > trusted_root.jsonl
gh attestation trusted-root > trusted_root.jsonl
Actualización de información de raíces de confianza en un entorno sin conexión
Se recomienda generar un nuevo archivo trusted_root.jsonl cada vez que importe nuevo material firmado en el entorno sin conexión.
El material de la clave en trusted_root.jsonl no tiene una fecha de expiración propia, por lo que todo lo firmado antes de generar el archivo raíz de confianza seguirá verificándose correctamente. Cualquier cosa firmada después de que se genere el archivo se verificará hasta que la instancia de Sigstore rote su material de clave, algo que generalmente ocurre varias veces al año. No sabrá si el material de clave se ha revocado desde la última vez que generó el archivo raíz de confianza.
Paso 3: Realizar la comprobación sin conexión
Ahora ya lo tiene todo listo para verificar el artefacto sin conexión.
Debe importar en el entorno sin conexión lo siguiente:
- GitHub CLI
- El artefacto
- El archivo de paquete
- El archivo raíz de confianza
A continuación, puede realizar la comprobación sin conexión con el siguiente comando:
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME --bundle sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl --custom-trusted-root trusted_root.jsonl
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME --bundle sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl --custom-trusted-root trusted_root.jsonl
Confirmación del repositorio en un entorno sin conexión
Al comprobar sin conexión, gh attestation verify compara el -R valor solo con los nombres de repositorio y propietario registrados en el certificado de firma de la atestación. Estos son los nombres que tenían el repositorio y el propietario cuando se creó la atestación. El comando no puede detectar si se ha cambiado el nombre del repositorio o propietario, o si un repositorio o propietario diferente ahora usa ese nombre.
Para asegurarse de que una atestación procede del repositorio que actualmente tiene ese nombre, descargue su bundle de la API de atestación, como se describe en el paso 1. La API de certificación devuelve solo certificaciones de ese repositorio.
El certificado de firma también registra el identificador del repositorio. Un repositorio mantiene su identificador cuando se cambia el nombre y un nuevo repositorio que toma el nombre antiguo obtiene un identificador diferente. Si comprueba un paquete de otro origen, como un paquete publicado junto con el artefacto, compare este identificador con el identificador del repositorio que espera.
-
En una máquina que esté en línea, obtenga el identificador del repositorio del que espera que provenga el artefacto.
Bash gh api repos/ORGANIZATION_NAME/REPOSITORY_NAME --jq .id
gh api repos/ORGANIZATION_NAME/REPOSITORY_NAME --jq .id -
En el entorno sin conexión, agregue las marcas
--format jsony--jqal comando de comprobación para imprimir el identificador del repositorio desde cada atestación comprobada.Para
-R, reemplaceORGANIZATION_NAME/REPOSITORY_NAMEpor los nombres del propietario y del repositorio registrados en el certificado de firma. Si se ha cambiado el nombre del repositorio o propietario, estos difieren de los nombres actuales usados para la búsqueda de API.Bash gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY \ -R ORGANIZATION_NAME/REPOSITORY_NAME \ --bundle PATH/TO/YOUR/BUNDLE.jsonl \ --custom-trusted-root trusted_root.jsonl \ --format json \ --jq '.[].verificationResult.signature.certificate.sourceRepositoryIdentifier'
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY \ -R ORGANIZATION_NAME/REPOSITORY_NAME \ --bundle PATH/TO/YOUR/BUNDLE.jsonl \ --custom-trusted-root trusted_root.jsonl \ --format json \ --jq '.[].verificationResult.signature.certificate.sourceRepositoryIdentifier' -
Compruebe que cada identificador de la salida coincide con el identificador del primer paso. No confíe en una atestación cuyo identificador no coincida, ya que otro repositorio que usó el mismo nombre lo creó.