Accedi ai metadati di sicurezza e verifica i pacchetti

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

Configura l'autenticazione.

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 o javascript. 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, o package-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

  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 usando lo strumento di verifica aoss

Utilizza lo strumento aoss-verifier per verificare i metadati del pacchetto.

Prima di utilizzare questo strumento, installa Go.

  1. Installa il strumento di verifica aoss.

  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 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 (sostituisci TEMP_DOWNLOADS_DIR_PATH). Se il flag non viene impostato, i file vengono scaricati nella cartella tmp_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.

  1. Scarica i metadati . Come descritto in Accedere ai metadati utilizzando Cloud Storage, Il file dei metadati contiene un campo SBOM all'interno del campo buildInfo. 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 denominato gradio-3.30.0-py3-none-any.whl, il valore 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 il tuo file dei 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 dell'artefatto .

  4. Verifica la presenza di eventuali differenze tra i due:

    diff actualDigest.txt expectedDigest.txt
    

    Se non ci sono differenze, non viene restituito 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 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
    
  8. 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.

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

  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 in metadata.json file:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
    
  3. 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.

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

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

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout  > pubKey.pem
    
  9. Estrai la catena di certificati pubblici in un file .pem:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout  > pubKeyChain.pem
    
  10. 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
    
  11. 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.