En esta página, se describe cómo acceder a metadatos de seguridad desde el
assuredoss-metadata
bucket de Cloud Storage. Para obtener una descripción de la política
metadatos, consulta
Campos de metadatos de seguridad.
Esta página se aplica solo al nivel Premium de Assured OSS. Para el nivel gratuito, consulta Verifica firmas en las ediciones gratuitas de nivel superior.
Antes de comenzar
Extrae los metadatos
Puedes usar los comandos gcloud
o curl
para descargar los metadatos.
Crea la URL de ambos con la siguiente información:
- Idioma:
java
,python
ojavascript
. El valor debe estar en minúsculas. - Package_ID: para Java, es
groupId:artifactId
Python espackageName
, y para JavaScript, es uno de@org-name/package-name
,@username/package-name
, opackage-name
. El valor debe estar en minúscula. - Versión: la versión del paquete
La URL debe tener el siguiente formato:
gcloud
gs://assuredoss-metadata/language/package_id/version/metadata.json
La URL debe estar en minúsculas.
URL de Python de muestra: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
Ejemplo de URL de Java: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Ejemplo de URL de JavaScript: gs://assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
curl
https://storage.googleapis.com/assuredoss-metadata/language/package_id/version/metadata.json
La URL debe estar en minúsculas.
URL de Python de muestra: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
Ejemplo de URL de Java: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Ejemplo de URL de JavaScript: https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
- Descarga los metadatos:
gcloud
gcloud storage cp "gs://assuredoss-metadata/language/package_id/version/metadata.json" outputFolderLocation
curl
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/assuredoss-metadata/language/package_id/version/metadata.json -o metadata.json
Ahora puedes verificar las firmas. Existen dos opciones:
- Verifica las firmas con la herramienta aoss-verifier
- Cómo verificar manualmente las firmas de los paquetes descargados
Verifica las firmas de los paquetes descargados con la herramienta aoss-verifier
Usa la herramienta aoss-verifier
para verificar los metadatos del paquete.
Antes de usar esta herramienta, instala Go.
Instala el aoss-verifier.
Exporta
$(go env GOPATH)/bin
.Ejecuta el comando
aoss-verifier verify-metadata
.aoss-verifier verify-metadata \ --metadata_type TYPE \ --language LANGUAGE \ --package_id PACKAGE_ID \ --version VERSION \ [--disable_certificate_verification] \ [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \ [--disable_deletes]
Reemplaza lo siguiente:
TYPE
: Los valores posibles sonpremiuminfo
.LANGUAGE
: Es el idioma del paquete. El valor debe estar en minúsculas.PACKAGE_ID
: En Java, el formato es el siguiente:groupId:artifactId
Para Python, el formato espackageName
El valor debe estar en minúscula.VERSION
: Es la versión del paquete.
--disable_certificate_verification
es una marca opcional que omite las coincidencias. del certificado de entidad final al certificado raíz a través de la cadena de certificados, si que se usan.--temp_downloads_path
es una marca opcional para establecer la ruta en la que deseas descarga los archivos (reemplazaTEMP_DOWNLOADS_DIR_PATH
). Si no se establece la marca, se descargan los archivos en la carpetatmp_downloads
del directorio actual.--disable_deletes
es una marca opcional que conserva los archivos descargados. De de forma predeterminada, la herramienta limpia todos los archivos descargados.
Para obtener más información, consulta el archivo README.
Verifica manualmente las firmas de los paquetes descargados
Puedes verificar la firma del artefacto solo para los objetos binarios que son seguros. creadas por Assured OSS, no las proporcionadas por Assured OSS a través de proxies
Puedes usar varias herramientas para verificar las firmas de forma manual. Sigue estos pasos: usa gcloud CLI y OpenSSL (versión 3.0.1 o posterior) jq (1.7.1 o superior) para verificar las firmas en Linux.
Descarga los metadatos predeterminado. Como se describe en Accede a metadatos con Cloud Storage, El archivo de metadatos contiene un campo
SBOM
dentro del campobuildInfo
. La SBOM contiene el artefacto (por ejemplo, un archivo JAR o EGG) que se junto con una anotación que represente la firma. Este artefacto permite determinas el ID de SPDX.Por ejemplo, si el nombre del artefacto es
artifact_name
,spdx_id
esSPDXRef-Package-artifact_name
Para validar un paquete con el nombregradio-3.30.0-py3-none-any.whl
, laspdx_id
esSPDXRef-Package-gradio-3.30.0-py3-none-any.whl
Extrae el resumen SHA-256 del archivo de metadatos:
cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.digest[0].digest' | cut -d ' ' -f1 > expectedDigest.txt
Reemplaza lo siguiente:
METADATA_FILENAME
: Es el nombre de tu archivo de metadatos de seguridad.SPDX_ID
: Es el identificador de SPDX.
Calcula el resumen de los artefactos:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Reemplaza
ARTIFACT_FILE
por el nombre del artefacto. .Comprueba si hay diferencias entre los dos:
diff actualDigest.txt expectedDigest.txt
Si no hay diferencia, no hay salida.
Extrae el resumen del campo en un archivo
.bin
:cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
Extrae la firma del resumen en un archivo
.sig
:cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.signature[0].signature' | xxd -r -p > sig.sig
Extrae el certificado público en un archivo
.pem
:cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Verifica la firma del resumen con el siguiente certificado:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Si se ejecuta de forma correcta, este comando muestra
Signature Verified Successfully
. Ahora puedes verificar el certificado.Extrae la cadena de certificados públicos en un archivo
.pem
:cat METADATA_FILENAME | jq -rj '.buildInfo' | jq -rj '.sbom' | jq -rj '.packages' | jq '.[] | select(.SPDXID=="SPDX_ID")' | jq -rj '.annotations[0].comment' | jq -rj '.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Descarga el certificado raíz (
ca.crt
en el siguiente comando):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifica el certificado con la cadena de certificados y la raíz certificado:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Si se ejecuta de forma correcta, este comando muestra
pubKey.pem: OK
.
Verifica las firmas para los campos de metadatos de seguridad
Puedes verificar la firma de los siguientes campos en los metadatos de seguridad independiente:
buildInfo
vexInfo
healthInfo
(si está presente)
A los datos dentro de los campos se les genera un hash con SHA-256 y, luego, se firma el hash con el algoritmo ECDSAP256_DER. El certificado y la cadena de certificados se proporcionados dentro de los metadatos para que puedas verificar la firma. Usa el siguiente certificado raíz para verificar la cadena de certificados:
https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Puedes verificar firmas manualmente o con el Herramienta Assured OSS Verifier.
En los siguientes pasos, se describe cómo verificar manualmente la firma del
Campo buildInfo
en el archivo metadata.json
. Puedes seguir pasos similares para
Verifica la firma de los campos vexInfo
o healthInfo
.
Puedes verificar firmas con varias herramientas. En el siguiente ejemplo, se usan gcloud CLI, OpenSSL (versión 3.0.1 o posterior) y jq (1.7.1 o posterior) para verificar las firmas en un sistema Linux.
Genera el resumen SHA-256 del campo:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Extrae el resumen del campo que se proporciona en
metadata.json
. archivo:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
Verifica si hay diferencias entre los dos resúmenes:
diff actualDigest.txt expectedDigest.txt
Si no hay diferencia, no habrá salida, que es el valor caso ideal. Ahora puedes verificar la firma.
Extrae el resumen del campo en un archivo
.bin
:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
Extrae la firma del resumen en un archivo
.sig
:cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
Extrae el certificado público en un archivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Verifica la firma del resumen con el siguiente certificado:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Si la verificación se realiza correctamente, este comando muestra
Signature Verified Successfully
. Ahora puedes verificar el certificado.Extrae el certificado público en un archivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Extrae la cadena de certificados públicos en un archivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Descarga el certificado raíz, llamado
ca.crt
, en el siguiente comando:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifica el certificado con la cadena de certificados y la raíz certificado:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Si se ejecuta de forma correcta, el comando muestra
pubKey.pem: OK
.