Cette page explique comment accéder aux métadonnées de sécurité à partir du bucket Cloud Storage assuredoss-metadata
. Pour en savoir plus sur les métadonnées de sécurité, consultez la section Champs de métadonnées de sécurité.
Cette page ne s'applique qu'au niveau premium Assured OSS. Pour le niveau gratuit, consultez Valider les signatures dans le niveau gratuit d'Assured OSS.
Avant de commencer
Configurez l'authentification.
Extraire les métadonnées
Vous pouvez utiliser les commandes gcloud
ou curl
pour télécharger les métadonnées.
Créez l'URL pour les deux à l'aide des informations suivantes :
- Langue :
java
,python
oujavascript
. La valeur doit être en minuscules. - Package_ID : pour Java, il s'agit de
groupId:artifactId
, pour Python depackageName
et pour JavaScript, de@org-name/package-name
,@username/package-name
oupackage-name
. La valeur doit être en minuscules. - Version:version du package.
L'URL doit respecter le format suivant:
gcloud
gs://assuredoss-metadata/language/package_id/version/metadata.json
L'URL doit être en minuscules.
Exemple d'URL Python: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
Exemple d'URL Java : gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Exemple d'URL 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
L'URL doit être en minuscules.
Exemple d'URL Python: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
Exemple d'URL Java: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Exemple d'URL JavaScript: https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
- Téléchargez les métadonnées:
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
Vous pouvez maintenant vérifier les signatures. Vous disposez de deux options :
- Vérifier les signatures à l'aide de l'outil aoss-verifier
- Vérifier manuellement les signatures des packages téléchargés
Vérifier les signatures des packages téléchargés à l'aide de l'outil aoss-verifier
Utilisez l'outil aoss-verifier
pour vérifier les métadonnées du package.
Avant d'utiliser cet outil, installez Go.
Installez la aoss-verifier.
Exporter
$(go env GOPATH)/bin
.Exécutez la commande
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]
Remplacez les éléments suivants :
TYPE
: les valeurs possibles sontpremiuminfo
.LANGUAGE
: langue du package. La valeur doit être en minuscules.PACKAGE_ID
: pour Java, le format est le suivant :groupId:artifactId
Pour Python, le format estpackageName
. La valeur doit être en minuscules.VERSION
: version du package.
--disable_certificate_verification
est un indicateur facultatif qui ignore la mise en correspondance du certificat de feuille avec le certificat racine via la chaîne de certificats, le cas échéant.--temp_downloads_path
est un indicateur facultatif permettant de définir le chemin d'accès où vous souhaitez télécharger les fichiers (remplacezTEMP_DOWNLOADS_DIR_PATH
). Si l'indicateur n'est pas défini, les fichiers sont téléchargés dans le dossiertmp_downloads
du répertoire actuel.--disable_deletes
est un indicateur facultatif qui conserve les fichiers téléchargés. Par défaut, l'outil nettoie tous les fichiers téléchargés.
Pour plus d'informations, consultez le fichier README.
Vérifier manuellement les signatures des packages téléchargés
Vous ne pouvez vérifier la signature de l'artefact que pour les binaires qui sont sécurisés créés par Assured OSS, et non ceux fournis par Assured OSS via des proxys.
Vous pouvez vérifier les signatures manuellement à l'aide de divers outils. Les étapes suivantes utilisent la gcloud CLI, OpenSSL (version 3.0.1 ou ultérieure) et jq (1.7.1 ou version ultérieure) pour valider les signatures sur Linux.
Télécharger les métadonnées fichier. Comme décrit dans la section Champs de métadonnées de sécurité, le fichier de métadonnées contient un champ
SBOM
dans le champbuildInfo
. Le SBOM contient l'artefact (par exemple, un fichier JAR ou EGG) qui a été construit avec une annotation qui représente la signature. Cet artefact permet vous déterminez l'ID SPDX.Par exemple, si le nom de l'artefact est
artifact_name
,spdx_id
estSPDXRef-Package-artifact_name
Pour valider un package nommégradio-3.30.0-py3-none-any.whl
,spdx_id
estSPDXRef-Package-gradio-3.30.0-py3-none-any.whl
.Extrayez le condensé SHA-256 du fichier de métadonnées:
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
Remplacez les éléments suivants :
METADATA_FILENAME
: nom de votre fichier de métadonnées de sécurité.SPDX_ID
: identifiant SPDX.
Calculez le condensé de l'artefact:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Remplacez
ARTIFACT_FILE
par le nom du fichier d'artefact.Vérifiez s'il existe des différences entre les deux :
diff actualDigest.txt expectedDigest.txt
S'il n'y a pas de différence, aucun résultat ne s'affiche.
Extrayez le récapitulatif du champ vers un fichier
.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
Extrayez la signature du récapitulatif dans un fichier
.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
Extrayez le certificat public dans un fichier
.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
Validez la signature du condensé à l'aide du certificat :
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Si l'opération réussit, cette commande renvoie
Signature Verified Successfully
. Vous pouvez maintenant vérifier le certificat.Extrayez la chaîne de certificats publics dans un fichier
.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
Téléchargez le certificat racine (
ca.crt
dans la commande suivante):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Vérifiez le certificat à l'aide de la chaîne de certificats et du certificat racine :
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Si l'opération réussit, cette commande renvoie
pubKey.pem: OK
.
Vérifier les signatures des champs de métadonnées de sécurité
Vous pouvez vérifier la signature des champs suivants dans les métadonnées de sécurité de manière indépendante:
buildInfo
vexInfo
healthInfo
(le cas échéant)
Les données des champs sont hachées à l'aide de SHA-256, puis le hachage est signé à l'aide de l'algorithme ECDSAP256_DER. Le certificat et la chaîne de certificats sont fournis dans les métadonnées afin que vous puissiez vérifier la signature. Utilisez les certificat racine suivant pour vérifier la chaîne de certificats:
https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Vous pouvez vérifier les signatures manuellement ou à l'aide de l'outil de vérification des logiciels Open Source assurés.
Les étapes suivantes décrivent comment vérifier manuellement la signature du
Champ buildInfo
dans le fichier metadata.json
. Vous pouvez suivre une procédure similaire pour vérifier la signature du champ vexInfo
ou du champ healthInfo
.
Vous pouvez vérifier les signatures à l'aide de divers outils. L'exemple suivant utilise la CLI gcloud, OpenSSL (version 3.0.1 ou ultérieure) et jq (version 1.7.1 ou ultérieure) pour vérifier les signatures sur un système Linux.
Générez le condensé SHA-256 du champ:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Extrayez le condensé du champ fourni dans
metadata.json
. :cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
Vérifiez s'il existe des différences entre les deux récapitulatifs :
diff actualDigest.txt expectedDigest.txt
S'il n'y a pas de différence, il n'y aura pas de sortie, ce qui est l'idéal. Vous pouvez maintenant valider la signature.
Extrayez le récapitulatif du champ vers un fichier
.bin
:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
Extrayez la signature du récapitulatif dans un fichier
.sig
:cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
Extrayez le certificat public dans un fichier
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Validez la signature du condensé à l'aide du certificat :
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Si la validation réussit, cette commande renvoie
Signature Verified Successfully
. Vous pouvez maintenant vérifier le certificat.Extrayez le certificat public dans un fichier
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Extrayez la chaîne de certificats publics dans un fichier
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Téléchargez le certificat racine nommé
ca.crt
dans la commande suivante:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Vérifier le certificat à l'aide de la chaîne de certificats et de la racine certificat:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Si l'opération réussit, la commande renvoie
pubKey.pem: OK
.