Auf Sicherheitsmetadaten zugreifen und Pakete prüfen

Auf dieser Seite wird beschrieben, wie Sie über den Cloud Storage-Bucket assuredoss-metadata auf Sicherheitsmetadaten zugreifen. Eine Beschreibung der Sicherheitsmetadaten finden Sie unter Sicherheitsmetadatenfelder.

Diese Seite gilt nur für die Premium-Stufe von Assured OSS. Informationen zur kostenlosen Stufe finden Sie unter Signaturen in der kostenlosen Stufe von Assured OSS überprüfen.

Hinweise

Richten Sie die Authentifizierung ein.

Metadaten extrahieren

Sie können die Metadaten mit dem Befehl gcloud oder curl herunterladen. Erstellen Sie die URL für beide mit den folgenden Informationen:

  • Sprache:java, python oder javascript. Der Wert muss in Kleinbuchstaben geschrieben werden.
  • Package_ID:: Für Java ist das groupId:artifactId, für Python packageName und für JavaScript eine der folgenden Optionen: @org-name/package-name, @username/package-name oder package-name. Der Wert muss in Kleinbuchstaben geschrieben werden.
  • Version:die Version des Pakets.

Die URL muss das folgende Format haben:

gcloud

gs://assuredoss-metadata/language/package_id/version/metadata.json

Die URL muss in Kleinbuchstaben geschrieben werden.

Beispiel-Python-URL: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json

Beispiel-Java-URL: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json

Beispiel für eine JavaScript-URL: 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

Die URL muss in Kleinbuchstaben geschrieben werden.

Beispiel-Python-URL: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json

Beispiel für eine Java-URL: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json

Beispiel für eine JavaScript-URL: https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json

  1. So laden Sie die Metadaten herunter:

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

Sie können jetzt die Unterschriften überprüfen. Sie haben zwei Möglichkeiten zur Auswahl:

Signaturen der heruntergeladenen Pakete mit dem aoss-verifier-Tool prüfen

Verwenden Sie das aoss-verifier-Tool, um die Paketmetadaten zu überprüfen.

Bevor Sie dieses Tool verwenden können, müssen Sie Go installieren.

  1. Installieren Sie das Tool aoss-verifier.

  2. $(go env GOPATH)/bin exportieren

  3. Führen Sie den Befehl aoss-verifier verify-metadata aus:

    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]
    

    Ersetzen Sie Folgendes:

    • TYPE: Die möglichen Werte sind premiuminfo.
    • LANGUAGE: Die Sprache des Pakets. Der Wert muss in Kleinbuchstaben geschrieben werden.
    • PACKAGE_ID: Für Java lautet das Format groupId:artifactId. Für Python lautet das Format packageName. Der Wert muss in Kleinbuchstaben geschrieben werden.
    • VERSION: Die Version des Pakets.

    --disable_certificate_verification ist ein optionales Flag, das das Abgleichen des untergeordneten Zertifikats mit dem Stammzertifikat über die Zertifikatskette überspringt, falls verwendet.

    --temp_downloads_path ist ein optionales Flag, mit dem Sie den Pfad festlegen, in den die Dateien heruntergeladen werden sollen (ersetzen Sie TEMP_DOWNLOADS_DIR_PATH). Ist das Flag nicht gesetzt, werden die Dateien in das aktuelle Verzeichnis in den Ordner tmp_downloads heruntergeladen.

    --disable_deletes ist ein optionales Flag, mit dem die heruntergeladenen Dateien beibehalten werden. Standardmäßig werden alle heruntergeladenen Dateien bereinigt.

Weitere Informationen finden Sie in der README-Datei.

Signaturen der heruntergeladenen Pakete manuell prüfen

Sie können die Artefaktsignatur nur für die Binärdateien überprüfen, die von Assured OSS sicher erstellt wurden, nicht für die, die von Assured OSS über Proxys bereitgestellt werden.

Es gibt verschiedene Tools, mit denen Sie Signaturen manuell prüfen können. In den folgenden Schritten werden die gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und jq (1.7.1 oder höher) verwendet, um die Signaturen unter Linux zu überprüfen.

  1. Lade die Metadatendatei herunter. Wie unter Sicherheitsmetadatenfelder beschrieben, enthält die Metadatendatei ein SBOM-Feld im buildInfo-Feld. Die SBOM enthält das Artefakt (z. B. eine JAR- oder EGG-Datei), das erstellt wurde, sowie eine Anmerkung, die die Signatur darstellt. Anhand dieses Artefakts können Sie die SPDX-ID ermitteln.

    Wenn der Name des Artefakts beispielsweise artifact_name lautet, lautet spdx_id SPDXRef-Package-artifact_name. Wenn Sie ein Paket mit dem Namen gradio-3.30.0-py3-none-any.whl validieren möchten, ist spdx_id SPDXRef-Package-gradio-3.30.0-py3-none-any.whl.

  2. Extrahieren Sie den SHA-256-Digest aus der Metadatendatei:

    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
    

    Ersetzen Sie Folgendes:

    • METADATA_FILENAME: Der Name der Sicherheitsmetadatendatei.

    • SPDX_ID: Die SPDX-ID.

  3. Artefakt-Digest berechnen:

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

    Ersetzen Sie ARTIFACT_FILE durch den Namen der Artefaktdatei.

  4. Prüfen Sie, ob es Unterschiede gibt:

    diff actualDigest.txt expectedDigest.txt
    

    Wenn kein Unterschied besteht, wird keine Ausgabe ausgegeben.

  5. Extrahieren Sie den Digest des Felds in eine .bin-Datei:

    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. Extrahieren Sie die Signatur des Digests in eine .sig-Datei:

    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. Extrahieren Sie das öffentliche Zertifikat in eine .pem-Datei:

    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. Verifiziere die Signatur des Digests mit dem Zertifikat:

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

    Bei Erfolg gibt dieser Befehl Signature Verified Successfully zurück. Sie können das Zertifikat jetzt bestätigen.

  9. Extrahieren Sie die öffentliche Zertifikatskette in eine .pem-Datei:

    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. Laden Sie das Root-Zertifikat (ca.crt im folgenden Befehl) herunter:

    curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    
  11. Prüfen Sie das Zertifikat mithilfe der Zertifikatskette und des Root-Zertifikats:

    openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
    

    Bei Erfolg gibt dieser Befehl pubKey.pem: OK zurück.

Signaturen für Sicherheitsmetadatenfelder prüfen

Sie können die Signatur der folgenden Felder in der Sicherheitsmetadatendatei unabhängig voneinander überprüfen:

  • buildInfo
  • vexInfo
  • healthInfo (falls vorhanden)

Die Daten in den Feldern werden mit SHA-256 gehasht und dann mit dem Algorithmus ECDSAP256_DER signiert. Das Zertifikat und die Zertifikatskette sind in den Metadaten enthalten, damit Sie die Signatur überprüfen können. Verwenden Sie das folgende Root-Zertifikat, um die Zertifikatskette zu überprüfen:

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

Sie können Signaturen manuell oder mit dem Assured OSS Verifier Tool prüfen.

In den folgenden Schritten wird beschrieben, wie Sie die Signatur des Felds buildInfo in der Datei metadata.json manuell überprüfen. Die Signatur des Felds vexInfo oder healthInfo lässt sich auf ähnliche Weise überprüfen.

Sie können Signaturen mit verschiedenen Tools überprüfen. Im folgenden Beispiel werden die gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und jq (1.7.1 oder höher) verwendet, um die Signaturen auf einem Linux-System zu überprüfen.

  1. Generieren Sie den SHA-256-Digest des Felds:

    cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
    
  2. Extrahieren Sie den Hashwert des Felds, das in der Datei metadata.json angegeben ist:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
    
  3. Prüfen Sie, ob es Unterschiede zwischen den beiden Zusammenfassungen gibt:

    diff actualDigest.txt expectedDigest.txt
    

    Wenn es keinen Unterschied gibt, wird keine Ausgabe ausgegeben. Das ist der Idealfall. Sie können die Signatur jetzt bestätigen.

  4. Extrahieren Sie den Digest des Felds in eine .bin-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
    
  5. Extrahieren Sie die Signatur des Digests in eine .sig-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
    
  6. Extrahieren Sie das öffentliche Zertifikat in eine .pem-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout  > pubKey.pem
    
  7. Verifiziere die Signatur des Digests mit dem Zertifikat:

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

    Wenn die Überprüfung erfolgreich ist, gibt dieser Befehl Signature Verified Successfully zurück. Sie können das Zertifikat jetzt bestätigen.

  8. Extrahieren Sie das öffentliche Zertifikat in eine .pem-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout  > pubKey.pem
    
  9. Extrahieren Sie die öffentliche Zertifikatskette in eine .pem-Datei:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout  > pubKeyChain.pem
    
  10. Laden Sie das Root-Zertifikat mit dem Namen ca.crt herunter:

    curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    
  11. Prüfen Sie das Zertifikat mithilfe der Zertifikatskette und des Root-Zertifikats:

    openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
    

    Bei Erfolg gibt der Befehl pubKey.pem: OK zurück.