Questa pagina descrive come accedere ai metadati di sicurezza dal bucket Cloud Storage assuredoss-metadata
. Per una descrizione dei metadati di sicurezza, vedi Campi dei metadati di sicurezza.
Questa pagina si applica solo al livello a pagamento di Assured OSS. Per il livello gratuito, consulta la pagina Verificare le firme nel livello gratuito di Assured OSS.
Prima di iniziare
Estrarre i metadati
Puoi utilizzare i comandi gsutil
o curl
per scaricare i metadati.
Crea l'URL per entrambi utilizzando le seguenti informazioni:
- Lingua:
java
,python
ojavascript
. Il valore deve essere scritto in minuscolo. - Package_ID: per Java è
groupId:artifactId
, per Python èpackageName
, mentre per JavaScript è uno di@org-name/package-name
,@username/package-name
opackage-name
. Il valore deve essere in minuscolo. - Version: la versione del pacchetto.
L'URL deve avere il seguente formato:
gsutil
gs://assuredoss-metadata/language/package_id/version/metadata.json
L'URL deve essere scritto in minuscolo.
URL Python di esempio: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
URL Java di esempio: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
URL JavaScript di esempio: 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 deve essere scritto in minuscolo.
URL Python di esempio: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
URL Java di esempio: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
URL JavaScript di esempio: https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
- Scarica i metadati:
gsutil
gsutil -m 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 con lo strumento di verifica Aoss
- Verificare manualmente le firme dei pacchetti scaricati
Verifica le firme dei pacchetti scaricati usando lo strumento di verifica aoss
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 scritto in minuscolo.PACKAGE_ID
: per Java, il formato ègroupId:artifactId
. Per Python, il formato èpackageName
. Il valore deve essere in minuscolo.VERSION
: la versione del pacchetto.
--disable_certificate_verification
è un flag facoltativo che salta la corrispondenza del certificato foglia al certificato radice attraverso la catena di certificati, se utilizzata.--temp_downloads_path
è un flag facoltativo per impostare il percorso in cui vuoi scaricare i file (sostituisciTEMP_DOWNLOADS_DIR_PATH
). Se il flag non viene impostato, i file vengono scaricati nella cartellatmp_downloads
della directory corrente.--disable_deletes
è un flag facoltativo che conserva i file scaricati. Per impostazione predefinita, lo strumento pulisce tutti i file scaricati.
Per ulteriori informazioni, consulta la sezione README.
Verifica 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 versioni successive) per verificare le firme su Linux.
Scarica il file dei metadati. Come descritto in Accedere ai metadati utilizzando Cloud Storage, il file di metadati contiene un campo
SBOM
all'interno del campobuildInfo
. SBOM contiene l'artefatto (ad esempio, un file JAR o EGG) che è stato creato insieme a un'annotazione che rappresenta la firma. Questo artefatto consente di determinare l'ID SPDX.Ad esempio, se il nome dell'artefatto è
artifact_name
,spdx_id
èSPDXRef-Package-artifact_name
. Per convalidare un pacchetto denominatogradio-3.30.0-py3-none-any.whl
, il valorespdx_id
èSPDXRef-Package-gradio-3.30.0-py3-none-any.whl
.Estrai il digest SHA-256 dal file di 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_FILE
con il nome del file dell'artefatto.Verifica la presenza di eventuali differenze tra i due:
diff actualDigest.txt expectedDigest.txt
Se non ci sono differenze, non viene restituito 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 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' | openssl x509 -pubkey -noout > pubKey.pem
Verifica la firma del digest utilizzando il certificato:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se l'operazione ha esito positivo, questo comando restituisce
Signature Verified Successfully
. Ora puoi verificare il certificato.Estrai la catena di certificati pubblici 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.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Scarica il certificato radice (
ca.crt
nel comando seguente):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifica il certificato utilizzando la catena di certificati e il certificato radice:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Se l'operazione ha esito positivo, questo comando restituisce
pubKey.pem: OK
.
Verifica 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:
buildInfo
vexInfo
healthInfo
(se presente)
I dati all'interno dei campi vengono sottoposti ad hashing utilizzando l'algoritmo SHA-256, quindi l'hash viene firmato utilizzando l'algoritmo ECDSAP256_DER. I certificati e la catena di certificati sono forniti all'interno dei metadati per consentirti di 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 spiegano 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 versioni 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
Controlla se ci sono differenze tra le due sintesi:
diff actualDigest.txt expectedDigest.txt
Se non c'è differenza, non ci sarà 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 il 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 il certificato:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se la verifica ha esito positivo, 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' | openssl x509 -pubkey -noout > pubKey.pem
Estrai la catena di certificati pubblici in un file
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Scarica il certificato radice, denominato
ca.crt
nel seguente comando:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifica il certificato utilizzando la catena di certificati e il certificato radice:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
In caso di esito positivo, il comando restituisce
pubKey.pem: OK
.