Questo documento descrive come accedere ai metadati di sicurezza dal bucket Cloud Storage assuredoss-metadata. Per una descrizione dei metadati di sicurezza, consulta
Campi dei metadati di sicurezza.
Questo documento si applica solo al livello premium di Assured OSS. Per il livello senza costi, consulta Verificare le firme nel livello senza costi di Assured OSS tier.
Prima di iniziare
Convalida la connettività ad Assured OSS per gli account di servizio richiesti.
Estrarre i metadati
Puoi utilizzare i comandi gcloud o curl per scaricare i metadati.
Costruisci l'URL per entrambi utilizzando le seguenti informazioni:
- Lingua:
java,python,golang, ojavascript. Il valore deve essere in minuscolo. Package_ID: uno dei seguenti:
- Java:
groupId:artifactId - Python:
packageName - JavaScript: uno di
@org-name/package-name,@username/package-nameopackage-name - Go:
packageName
Il valore deve essere in minuscolo.
- Java:
Versione: la versione del pacchetto.
L'URL deve avere il seguente formato:
gcloud
gs://assuredoss-metadata/language/package_id/version/metadata.json
L'URL deve essere in minuscolo.
Alcuni esempi di URL sono:
Esempio di URL Python:
gs://assuredoss-metadata/python/blessed/1.20.0/metadata.jsonEsempio di URL Java:
gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.jsonEsempio di URL JavaScript:
gs://assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.jsonEsempio di URL Go:
gs://assuredoss-metadata/golang/github.com/rs/zerolog/1.9.1/metadata.json
curl
https://storage.googleapis.com/assuredoss-metadata/language/package_id/version/metadata.json
L'URL deve essere in minuscolo.
Alcuni esempi di URL sono:
Esempio di URL Python:
https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.jsonEsempio di URL Java:
https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.jsonEsempio di URL JavaScript:
https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.jsonEsempio di URL Go:
https://storage.googleapis.com/assuredoss-metadata/golang/github.com/rs/zerolog/1.9.1/metadata.json
- Scarica i metadati:
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
Ora puoi verificare le firme. Le opzioni disponibili sono due:
- Verificare le firme utilizzando lo strumento aoss-verifier
- Verificare manualmente le firme dei pacchetti scaricati
Verificare le firme dei pacchetti scaricati utilizzando lo strumento aoss-verifier
Utilizza lo strumento aoss-verifier per verificare i metadati del pacchetto.
Prima di utilizzare questo strumento, installa Go.
Installa lo strumento aoss-verifier.
Esporta
$(go env GOPATH)/bin.Esegui il 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]Sostituisci quanto segue:
TYPE: i valori possibili sonopremiuminfo.LANGUAGE: la lingua del pacchetto. Il valore deve essere in minuscolo.PACKAGE_ID: per Java, il formato ègroupId:artifactId. Per Python e Go, il formato èpackageName. Il valore deve essere in minuscolo.VERSION: la versione del pacchetto.
--disable_certificate_verificationè un flag facoltativo che, se utilizzato, salta la corrispondenza del certificato foglia con il certificato radice tramite la catena di certificati.--temp_downloads_pathè un flag facoltativo per impostare il percorso in cui vuoi scaricare i file (sostituisciTEMP_DOWNLOADS_DIR_PATH). Se il flag non è impostato, i file vengono scaricati nella cartellatmp_downloadsnella directory corrente.--disable_deletesè un flag facoltativo che mantiene i file scaricati. Per impostazione predefinita, lo strumento pulisce tutti i file scaricati.
Per saperne di più, consulta il file README.
Verificare manualmente le firme dei pacchetti scaricati
Puoi verificare la firma dell'artefatto solo per i file binari creati in modo sicuro da Assured OSS, non per quelli forniti da Assured OSS tramite proxy.
Per verificare manualmente le firme, puoi utilizzare vari strumenti. I passaggi seguenti utilizzano gcloud CLI, OpenSSL (versione 3.0.1 o successive) e jq (1.7.1 o successive) per verificare le firme su Linux.
Scarica il file dei metadati. Come descritto in Campi dei metadati di sicurezza, il file dei metadati contiene un campo
SBOMall'interno del campobuildInfo. L'SBOM contiene l'artefatto (ad esempio, un file JAR o EGG) creato insieme a un'annotazione che rappresenta la firma. Questo artefatto ti consente di determinare l'ID SPDX.Ad esempio, se il nome dell'artefatto è
artifact_name, ilspdx_idèSPDXRef-Package-artifact_name. Per convalidare un pacchetto denominatogradio-3.30.0-py3-none-any.whl, ilspdx_idèSPDXRef-Package-gradio-3.30.0-py3-none-any.whl.Estrai il digest SHA-256 dal file dei metadati:
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
Sostituisci quanto segue:
METADATA_FILENAME: il nome del file dei metadati di sicurezza.SPDX_ID: l'identificatore SPDX.
Calcola il digest dell'artefatto:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Sostituisci
ARTIFACT_FILEcon il nome del file dell'artefatto.Verifica se ci sono differenze tra i due:
diff actualDigest.txt expectedDigest.txt
Se non ci sono differenze, non viene generato alcun output.
Estrai il digest del campo in un file
.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
Estrai la firma del digest in un file
.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
Estrai la chiave pubblica dal certificato pubblico in un file
.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 digest utilizzando la chiave pubblica estratta:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se l'operazione va a buon fine, questo comando restituisce
Signature Verified Successfully. Ora puoi verificare il certificato.Estrai il certificato pubblico in un file
.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
Scarica il certificato radice (
ca.crtnel comando seguente):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifica il certificato utilizzando il certificato estratto e il certificato radice:
openssl verify -verbose -CAfile ca.crt cert.pem
Se l'operazione va a buon fine, questo comando restituisce
cert.pem: OK.
Verificare le firme per i campi dei metadati di sicurezza
Puoi verificare la firma dei seguenti campi nel file dei metadati di sicurezza in modo indipendente:
buildInfovexInfohealthInfo(se presente)
I dati all'interno dei campi vengono sottoposti ad hashing utilizzando SHA-256, quindi l'hash viene firmato utilizzando l'algoritmo ECDSAP256_DER. Il certificato e la catena di certificati vengono forniti all'interno dei metadati in modo che tu possa verificare la firma. Utilizza il seguente certificato radice per verificare la catena di certificati:
https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Puoi verificare le firme manualmente o utilizzando lo strumento di verifica di Assured OSS.
I passaggi seguenti descrivono come verificare manualmente la firma del campo buildInfo nel file metadata.json. Puoi utilizzare passaggi simili per verificare la firma del campo vexInfo o del campo healthInfo.
Puoi verificare le firme utilizzando vari strumenti. L'esempio seguente utilizza gcloud CLI, OpenSSL (versione 3.0.1 o successive) e jq (1.7.1 o successive) per verificare le firme su un sistema Linux.
Genera il digest SHA-256 del campo:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Estrai il digest del campo fornito nel file
metadata.json:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
Verifica se ci sono differenze tra i due digest:
diff actualDigest.txt expectedDigest.txt
Se non ci sono differenze, non verrà generato alcun output, che è il caso ideale. Ora puoi verificare la firma.
Estrai il digest del campo in un file
.bin:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
Estrai la firma del digest in un file
.sig:cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
Estrai la chiave pubblica dal certificato pubblico in un file
.pem:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Verifica la firma del digest utilizzando la chiave pubblica estratta:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se la verifica va a buon fine, questo comando restituisce
Signature Verified Successfully. Ora puoi verificare il certificato.Estrai il certificato pubblico in un file
.pem:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' > cert.pem
Scarica il certificato radice, denominato
ca.crtnel comando seguente:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifica il certificato utilizzando il certificato estratto e il certificato radice:
openssl verify -verbose -CAfile ca.crt cert.pem
Se l'operazione va a buon fine, il comando restituisce
cert.pem: OK.