Auf Sicherheitsmetadaten zugreifen und Pakete überprüfen

Auf dieser Seite wird beschrieben, wie Sie über die assuredoss-metadata Cloud Storage-Bucket. Eine Beschreibung des Wertpapiers Metadaten, siehe Sicherheitsmetadaten .

Diese Seite gilt nur für die kostenpflichtige Version von Assured OSS. Für die kostenlosen Stufe, siehe Verify signatures in the Assured OSS Free Stufe

Hinweise

Richten Sie die Authentifizierung ein.

Metadaten extrahieren

Zum Herunterladen der Metadaten können Sie die Befehle gcloud oder curl verwenden. Erstellen Sie die URL für beide mithilfe der folgenden Informationen:

  • Sprache:java, python oder javascript. Der Wert muss in Kleinbuchstaben geschrieben werden.
  • Package_ID: Für Java ist dies groupId:artifactId, für Python ist packageName und für JavaScript einer der @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.

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

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

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

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

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

  1. 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 Signaturen überprüfen. Sie haben zwei Möglichkeiten zur Auswahl:

Signaturen heruntergeladener Pakete mit dem Tool „aoss-verifier“ prüfen

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

Bevor Sie dieses Tool verwenden, installieren Sie Go.

  1. Installieren Sie die aoss-verifier verwenden.

  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: Mögliche Werte sind premiuminfo.
    • LANGUAGE: Die Paketsprache. Der Wert muss in Kleinbuchstaben geschrieben werden.
    • PACKAGE_ID: Bei Java ist das Format groupId:artifactId. Bei 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 den Abgleich überspringt vom untergeordneten Zertifikat über die Zertifikatskette zum Stammzertifikat verwendet.

    --temp_downloads_path ist ein optionales Flag, das den Pfad festlegt, unter dem Sie den Dateien herunterladen (ersetzen Sie TEMP_DOWNLOADS_DIR_PATH). Wenn das Flag nicht gesetzt ist, werden die Dateien in den Ordner tmp_downloads im des aktuellen Verzeichnisses.

    --disable_deletes ist ein optionales Flag, das die heruntergeladenen Dateien behält. Von entfernt das Tool alle heruntergeladenen Dateien.

Weitere Informationen finden Sie in der README-Datei.

Signaturen heruntergeladener Pakete manuell prüfen

Sie können die Artefaktsignatur nur für die Binärdateien überprüfen, die sicher sind von Assured OSS erstellt, nicht von den Sicherer OSS durch Proxys.

Sie können verschiedene Tools verwenden, um Signaturen manuell zu überprüfen. Gehen Sie dazu so vor: Verwenden Sie die gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und JQ (1.7.1 oder höher), um die Signaturen unter Linux zu überprüfen.

  1. Metadaten herunterladen Datei. Wie unter Mit Cloud Storage auf Metadaten zugreifen beschrieben, Die Metadatendatei enthält das Feld SBOM im Feld buildInfo. SBOM enthält das Artefakt (z. B. eine JAR- oder EGG-Datei), das zuvor zusammen mit einer Annotation erstellt, die die Signatur darstellt. Mit diesem Artefakt ermitteln Sie die SPDX-ID.

    Lautet der Name des Artefakts beispielsweise artifact_name, ist das spdx_id SPDXRef-Package-artifact_name So validieren Sie ein Paket mit dem Namen gradio-3.30.0-py3-none-any.whl, die spdx_id ist 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 von Ihre Sicherheitsmetadatendatei.

    • SPDX_ID: die SPDX-Kennung.

  3. Berechnen Sie den Artefakt-Digest:

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

    Ersetzen Sie ARTIFACT_FILE durch den Namen des Artefakts. -Datei.

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

    diff actualDigest.txt expectedDigest.txt
    

    Wenn es keinen Unterschied gibt, gibt es keine Ausgabe.

  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. Prüfen Sie die Signatur des Digests mithilfe des Zertifikats:

    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 überprüfen.

  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 herunter (im folgenden Befehl ca.crt):

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

    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 überprüfen

Sie können die Signatur der folgenden Felder in den Sicherheitsmetadaten prüfen -Datei unabhängig voneinander:

  • buildInfo
  • vexInfo
  • healthInfo (falls vorhanden)

Die Daten in den Feldern werden mit dem SHA256-Algorithmus gehasht und dann signiert mit dem Algorithmus ECDSAP256_DER. Das Zertifikat und die Zertifikatskette die in den Metadaten bereitgestellt werden, damit Sie die Signatur verifizieren können. Verwenden Sie die Methode folgendes Root-Zertifikat verwenden, um die Zertifikatskette zu verifizieren:

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

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

In den folgenden Schritten wird beschrieben, wie Sie die Signatur des buildInfo in der Datei metadata.json. Sie können ähnliche Schritte verwenden, Prüfen Sie die Signatur des Felds vexInfo oder healthInfo.

Sie können Signaturen mit verschiedenen Tools überprüfen. Im folgenden Beispiel werden gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und JQ (1.7.1 oder höher), 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 Digest des Felds aus der metadata.json Datei:

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

    diff actualDigest.txt expectedDigest.txt
    

    Gibt es keinen Unterschied, wird auch keine Ausgabe generiert, Idealfall. Sie können die Signatur jetzt überprüfen.

  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. Prüfen Sie die Signatur des Digests mithilfe des Zertifikats:

    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 überprüfen.

  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 im folgenden Befehl 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. Zertifikat mithilfe der Zertifikatskette und des Root-Zertifikats prüfen Zertifikat:

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

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