En esta página, se describe cómo acceder a los metadatos de seguridad del bucket de assuredoss-metadata
de Cloud Storage. Para obtener una descripción de los metadatos de seguridad, consulta Campos de metadatos de seguridad.
Esta página solo se aplica al nivel premium de Assured OSS. Para obtener información sobre el nivel gratuito, consulta Cómo verificar firmas en el nivel gratuito de Assured OSS.
Antes de comenzar
Cómo extraer los metadatos
Puedes usar los comandos gcloud
o curl
para descargar los metadatos.
Construye la URL para ambos con la siguiente información:
- Idioma:
java
,python
ojavascript
. El valor debe estar en minúsculas. - Package_ID: Para Java, es
groupId:artifactId
; para Python, espackageName
; y, para JavaScript, es uno de los siguientes:@org-name/package-name
,@username/package-name
opackage-name
. El valor debe estar en minúsculas. - Versión: Es 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 muestra de Python: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
URL de muestra de Java: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
URL de JavaScript de ejemplo: 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 muestra de Python: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
URL de muestra de Java: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
URL de JavaScript de ejemplo: 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 de aoss-verifier
para verificar los metadatos del paquete.
Antes de usar esta herramienta, instala Go.
Instala la herramienta 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 esgroupId:artifactId
. En Python, el formato espackageName
. El valor debe estar en minúsculas.VERSION
: Es la versión del paquete.
--disable_certificate_verification
es una marca opcional que omite la coincidencia del certificado de hoja con el certificado raíz a través de la cadena de certificados, si se usa.--temp_downloads_path
es una marca opcional para establecer la ruta de acceso en la que deseas descargar los archivos (reemplazaTEMP_DOWNLOADS_DIR_PATH
). Si no se establece la marca, los archivos se descargan en la carpetatmp_downloads
del directorio actual.--disable_deletes
es una marca opcional que conserva los archivos descargados. De forma predeterminada, la herramienta limpia todos los archivos descargados.
Para obtener más información, consulta el archivo README.
Verifica las firmas de los paquetes descargados de forma manual
Solo puedes verificar la firma del artefacto para los archivos binarios que Assured OSS compila de forma segura, no para los que proporciona a través de proxies.
Para verificar las firmas de forma manual, puedes usar varias herramientas. En los siguientes pasos, se usan gcloud CLI, OpenSSL (versión 3.0.1 o posterior) y jq (1.7.1 o posterior) para verificar las firmas en Linux.
Descarga el archivo de metadatos. Como se describe en Campos de metadatos de seguridad, 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 compiló junto con una anotación que representa la firma. Este artefacto te permite determinar el ID de SPDX.Por ejemplo, si el nombre del artefacto es
artifact_name
, elspdx_id
esSPDXRef-Package-artifact_name
. Para validar un paquete llamadogradio-3.30.0-py3-none-any.whl
, elspdx_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 del artefacto:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Reemplaza
ARTIFACT_FILE
por el nombre del archivo de artefacto.Verifica si hay diferencias entre los dos:
diff actualDigest.txt expectedDigest.txt
Si no hay diferencias, no se genera ningún resultado.
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 la clave pública del certificado público a 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 la clave pública extraída:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Si se ejecuta correctamente, este comando devuelve
Signature Verified Successfully
. Ahora puedes verificar el certificado.Extrae el certificado público a 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' > cert.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 el certificado extraído y el certificado raíz:
openssl verify -verbose -CAfile ca.crt cert.pem
Si se ejecuta correctamente, este comando devuelve
cert.pem: OK
.
Verifica las firmas de los campos de metadatos de seguridad
Puedes verificar la firma de los siguientes campos en el archivo de metadatos de seguridad de forma independiente:
buildInfo
vexInfo
healthInfo
(si está presente)
Los datos dentro de los campos se codifican con SHA-256 y, luego, el hash se firma con el algoritmo ECDSAP256_DER. El certificado y la cadena de certificados se proporcionan 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 las firmas de forma manual o con la herramienta de verificación de OSS asegurado.
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 verificar la firma del campo vexInfo
o del campo healthInfo
.
Puedes verificar las 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 el archivo
metadata.json
: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 diferencias, no habrá resultados, lo que es el 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 la clave pública del certificado público a un archivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Verifica la firma del resumen con la clave pública extraída:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Si la verificación se realiza correctamente, este comando devuelve
Signature Verified Successfully
. Ahora puedes verificar el certificado.Extrae el certificado público a un archivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' > cert.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 el certificado extraído y el certificado raíz:
openssl verify -verbose -CAfile ca.crt cert.pem
Si se completa correctamente, el comando devuelve
cert.pem: OK
.