In diesem Dokument wird beschrieben, wie Sie auf Sicherheitsmetadaten aus dem assuredoss-metadata Cloud Storage-Bucket zugreifen. Eine Beschreibung der Sicherheitsmetadaten finden Sie unter Felder für Sicherheitsmetadaten.
Dieses Dokument gilt nur für die Premium-Version von Assured OSS. Informationen zum kostenlosen Kontingent finden Sie unter Signaturen im kostenlosen Kontingent von Assured OSS überprüfen.
Hinweise
- Verbindung zu Assured OSS validieren für die angeforderten Dienstkonten. 
Metadaten extrahieren
Sie können die Metadaten mit den Befehlen gcloud oder curl herunterladen.
Erstellen Sie die URL für beide mit den folgenden Informationen:
- Sprache: java,python,golangoderjavascript. Der Wert muss in Kleinbuchstaben angegeben werden.
- Package_ID::einer der folgenden Werte: - Java: groupId:artifactId
- Python: packageName
- JavaScript: Entweder @org-name/package-name,@username/package-nameoderpackage-name
- Go: packageName
 - Der Wert muss in Kleinbuchstaben angegeben werden. 
- Java: 
- 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-URLs:
- Beispiel-Python-URL: - gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
- Beispiel für eine Java-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
- Beispiel für eine Go-URL: - gs://assuredoss-metadata/golang/github.com/rs/zerolog/1.9.1/metadata.json
curl
https://storage.googleapis.com/assuredoss-metadata/language/package_id/version/metadata.json
Die URL muss in Kleinbuchstaben geschrieben werden.
Beispiel-URLs:
- 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
- JavaScript-Beispiel-URL: - https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
- Beispiel für eine Go-URL: - https://storage.googleapis.com/assuredoss-metadata/golang/github.com/rs/zerolog/1.9.1/metadata.json
- Metadaten herunterladen:
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 die Signaturen jetzt überprüfen. Sie haben zwei Möglichkeiten zur Auswahl:
- Signaturen mit dem Tool „aoss-verifier“ überprüfen
- Signaturen heruntergeladener Pakete manuell überprüfen
Signaturen heruntergeladener Pakete mit dem Tool „aoss-verifier“ prüfen
Verwenden Sie das aoss-verifier-Tool, um die Paketmetadaten zu überprüfen.
Installieren Sie Go, bevor Sie dieses Tool verwenden.
- Installieren Sie das aoss-verifier-Tool. 
- $(go env GOPATH)/binexportieren
- Führen Sie den Befehl - aoss-verifier verify-metadataaus:- 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 ist das Format- groupId:artifactId. Für Python und Go lautet das Format- packageName. Der Wert muss in Kleinbuchstaben angegeben werden.
- VERSION: Die Version des Pakets.
 - --disable_certificate_verificationist ein optionales Flag, mit dem der Abgleich des untergeordneten Zertifikats mit dem Root-Zertifikat über die Zertifikatskette übersprungen wird, sofern es verwendet wird.- --temp_downloads_pathist ein optionales Flag, mit dem Sie den Pfad festlegen können, in den die Dateien heruntergeladen werden sollen (ersetzen Sie- TEMP_DOWNLOADS_DIR_PATH). Wenn das Flag nicht festgelegt ist, werden die Dateien in den Ordner- tmp_downloadsim aktuellen Verzeichnis heruntergeladen.- --disable_deletesist 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 heruntergeladener 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 Binärdateien, die von Assured OSS über Proxys bereitgestellt werden.
Sie können Signaturen manuell mit verschiedenen Tools überprüfen. In den folgenden Schritten werden die gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und jq (Version 1.7.1 oder höher) verwendet, um die Signaturen unter Linux zu prüfen.
- Metadatendatei herunterladen Wie unter Felder für Sicherheitsmetadaten beschrieben, enthält die Metadatendatei ein - SBOM-Feld innerhalb des- buildInfo-Felds. Die SBOM enthält das Artefakt (z. B. eine JAR- oder EGG-Datei), das zusammen mit einer Annotation erstellt wurde, die die Signatur darstellt. Mit diesem Artefakt können Sie die SPDX-ID ermitteln.- Wenn der Artefaktnamen beispielsweise - artifact_namelautet, ist- spdx_id- SPDXRef-Package-artifact_name. Um ein Paket mit dem Namen- gradio-3.30.0-py3-none-any.whlzu validieren, ist- spdx_id- SPDXRef-Package-gradio-3.30.0-py3-none-any.whl.
- 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 Ihrer Sicherheitsmetadatendatei.
- SPDX_ID: Die SPDX-Kennung.
 
- Berechnen Sie den Artefaktdigest: - sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt - Ersetzen Sie - ARTIFACT_FILEdurch den Namen der Artefaktdatei.
- Prüfen Sie, ob es Unterschiede zwischen den beiden gibt: - diff actualDigest.txt expectedDigest.txt - Wenn es keinen Unterschied gibt, erfolgt keine Ausgabe. 
- 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 
- 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 
- Extrahieren Sie den öffentlichen Schlüssel aus dem öffentlichen 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 
- Überprüfen Sie die Signatur des Digests mit dem extrahierten öffentlichen Schlüssel: - openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig - Bei Erfolg gibt dieser Befehl - Signature Verified Successfullyzurück. Sie können das Zertifikat jetzt bestätigen.
- 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' > cert.pem 
- Laden Sie das Root-Zertifikat herunter ( - ca.crtim folgenden Befehl):- curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt 
- Prüfen Sie das Zertifikat mit dem extrahierten Zertifikat und dem Root-Zertifikat: - openssl verify -verbose -CAfile ca.crt cert.pem - Bei Erfolg gibt dieser Befehl - cert.pem: OKzurück.
Signaturen für Sicherheitsmetadatenfelder prüfen
Sie können die Signatur der folgenden Felder in der Datei mit Sicherheitsmetadaten unabhängig voneinander prüfen:
- buildInfo
- vexInfo
- healthInfo(falls vorhanden)
Die Daten in den Feldern werden mit SHA-256 gehasht und der Hash wird dann mit dem ECDSAP256_DER-Algorithmus 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. Sie können ähnliche Schritte ausführen, um die Signatur des Felds vexInfo oder des Felds healthInfo zu ü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 (Version 1.7.1 oder höher) verwendet, um die Signaturen auf einem Linux-System zu überprüfen.
- Generieren Sie den SHA-256-Digest des Felds: - cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt 
- Extrahieren Sie den Hash des Felds aus der Datei - metadata.json:- cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt 
- Prüfen Sie, ob es Unterschiede zwischen den beiden Digests gibt: - diff actualDigest.txt expectedDigest.txt - Wenn es keinen Unterschied gibt, wird keine Ausgabe generiert. Das ist der Idealfall. Sie können die Signatur jetzt überprüfen. 
- 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 
- Extrahieren Sie die Signatur des Digests in eine - .sig-Datei:- cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig 
- Extrahieren Sie den öffentlichen Schlüssel aus dem öffentlichen Zertifikat in eine - .pem-Datei:- cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem 
- Überprüfen Sie die Signatur des Digests mit dem extrahierten öffentlichen Schlüssel: - openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig - Wenn die Prüfung erfolgreich ist, gibt dieser Befehl - Signature Verified Successfullyzurück. Sie können das Zertifikat jetzt bestätigen.
- Extrahieren Sie das öffentliche Zertifikat in eine - .pem-Datei:- cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' > cert.pem 
- Laden Sie das Root-Zertifikat herunter, das im folgenden Befehl - ca.crtheißt:- curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt 
- Prüfen Sie das Zertifikat mit dem extrahierten Zertifikat und dem Root-Zertifikat: - openssl verify -verbose -CAfile ca.crt cert.pem - Bei Erfolg gibt der Befehl - cert.pem: OKzurück.