In questa pagina viene descritto come accedere ai metadati per la sicurezza dal
assuredoss-metadata
bucket Cloud Storage. Per una descrizione della sicurezza
dei metadati; consulta l'articolo Metadati sulla sicurezza
campi.
Questa pagina si applica solo al livello a pagamento di Assured OSS. Per Livello gratuito, vedi Verificare le firme in Assured OSS Free .
Prima di iniziare
Estrarre i metadati
Puoi utilizzare i comandi gcloud
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:
gcloud
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:
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 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 il strumento di verifica aoss.
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 il certificato foglia al certificato radice attraverso la catena di certificati, se in uso.--temp_downloads_path
è un flag facoltativo per impostare il percorso in cui vuoi scarica i file (sostituisciTEMP_DOWNLOADS_DIR_PATH
). Se il flag non viene impostato, i file vengono scaricati nella cartellatmp_downloads
in della directory corrente.--disable_deletes
è un flag facoltativo che conserva i file scaricati. Di 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 che sono sicuri creati da Assured OSS, non quelli forniti Assured OSS tramite proxy.
Per verificare manualmente le firme, puoi utilizzare vari strumenti. I seguenti passaggi utilizza gcloud CLI, OpenSSL (versione 3.0.1 o successiva) e (1.7.1 o superiore) per verificare le firme su Linux.
Scarica i metadati . Come descritto in Accedere ai metadati utilizzando Cloud Storage, Il file dei metadati contiene un campo
SBOM
all'interno del campobuildInfo
. SBOM contiene l'elemento (ad esempio un file JAR o EGG) che è insieme a un'annotazione che rappresenta la firma. Questo artefatto consente determinare l'ID SPDX.Ad esempio, se il nome dell'artefatto è
artifact_name
,spdx_id
èSPDXRef-Package-artifact_name
. 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 il tuo 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 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 la radice certificato:
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 nei metadati per la sicurezza file indipendentemente:
buildInfo
vexInfo
healthInfo
(se presente)
I dati all'interno dei campi vengono sottoposti ad hashing utilizzando l'algoritmo SHA-256 e poi l'hash viene firmato. utilizzando l'algoritmo ECDSAP256_DER. Il certificato e la catena di certificati sono forniti all'interno dei metadati per consentirti di verificare la firma. Utilizza la 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 il Strumento di verifica OSS di Assured.
I passaggi seguenti spiegano come verificare manualmente la firma del
Campo buildInfo
nel file metadata.json
. Puoi utilizzare passaggi simili
verificare la firma del campo vexInfo
o healthInfo
.
Puoi verificare le firme utilizzando vari strumenti. L'esempio seguente utilizza gcloud CLI, OpenSSL (versione 3.0.1 o successive) e (1.7.1 o versione successiva) 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 in
metadata.json
file: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, ovvero 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 la radice certificato:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
In caso di esito positivo, il comando restituisce
pubKey.pem: OK
.