Accedere ai metadati di sicurezza e verificare i pacchetti

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 premium di Assured OSS. Per il livello gratuito, vedi Verificare le firme nel livello gratuito di Assured OSS.

Prima di iniziare

Configura l'autenticazione.

Estrai 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 o javascript. Il valore deve essere in minuscolo.
  • Package_ID::per Java è groupId:artifactId, per Python è packageName e per JavaScript è uno tra @org-name/package-name, @username/package-name, o package-name. Il valore deve essere in minuscolo.
  • 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.

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 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

  1. 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:

Verifica 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.

  1. Installa lo strumento aoss-verifier.

  2. Esporta $(go env GOPATH)/bin.

  3. 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 sono premiuminfo.
    • LANGUAGE: la lingua del pacchetto. Il valore deve essere 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, se utilizzato, salta la corrispondenza tra il certificato foglia e il certificato radice tramite la catena di certificati.

    --temp_downloads_path è un flag facoltativo per impostare il percorso in cui vuoi scaricare i file (sostituisci TEMP_DOWNLOADS_DIR_PATH). Se il flag non è impostato, i file vengono scaricati nella cartella tmp_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 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 seguenti passaggi utilizzano gcloud CLI, OpenSSL (versione 3.0.1 o successive) e jq (1.7.1 o versioni successive) per verificare le firme su Linux.

  1. Scarica il file di metadati. Come descritto in Campi dei metadati di sicurezza, il file di metadati contiene un campo SBOM all'interno del campo buildInfo. La 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, spdx_id è SPDXRef-Package-artifact_name. Per convalidare un pacchetto denominato gradio-3.30.0-py3-none-any.whl, il spdx_id è SPDXRef-Package-gradio-3.30.0-py3-none-any.whl.

  2. 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 di metadati di sicurezza.

    • SPDX_ID: l'identificatore SPDX.

  3. Calcola il digest dell'artefatto:

    sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
    

    Sostituisci ARTIFACT_FILE con il nome del file dell'artefatto.

  4. Verifica se ci sono differenze tra i due:

    diff actualDigest.txt expectedDigest.txt
    

    Se non c'è alcuna differenza, non viene generato alcun output.

  5. 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
    
  6. 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
    
  7. 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
    
  8. Verifica la firma del digest utilizzando la chiave pubblica estratta:

    openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
    

    In caso di esito positivo, questo comando restituisce Signature Verified Successfully. Ora puoi verificare il certificato.

  9. 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
    
  10. 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
    
  11. Verifica il certificato utilizzando il certificato estratto e il certificato radice:

    openssl verify -verbose -CAfile ca.crt cert.pem
    

    In caso di esito positivo, 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:

  • buildInfo
  • vexInfo
  • healthInfo (se presente)

I dati all'interno dei campi vengono sottoposti ad hashing utilizzando SHA-256, dopodiché l'hash viene firmato utilizzando l'algoritmo ECDSAP256_DER. Il certificato e la catena di certificati sono 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 OSS garantito.

I seguenti passaggi 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 versioni successive) per verificare le firme su un sistema Linux.

  1. Genera il digest SHA-256 del campo:

    cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
    
  2. Estrai il digest del campo fornito nel file metadata.json:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
    
  3. Verifica eventuali differenze tra i due riepiloghi:

    diff actualDigest.txt expectedDigest.txt
    

    Se non c'è alcuna differenza, non ci sarà alcun output, il che è il caso ideale. Ora puoi verificare la firma.

  4. 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
    
  5. Estrai la firma del digest in un file .sig:

    cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
    
  6. 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
    
  7. 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 ha esito positivo, questo comando restituisce Signature Verified Successfully. Ora puoi verificare il certificato.

  8. Estrai il certificato pubblico in un file .pem:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' > cert.pem
    
  9. Scarica il certificato radice, denominato ca.crt nel comando seguente:

    curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    
  10. Verifica il certificato utilizzando il certificato estratto e il certificato radice:

    openssl verify -verbose -CAfile ca.crt cert.pem
    

    In caso di esito positivo, il comando restituisce cert.pem: OK.