In diesem Dokument wird beschrieben, wie Sie auf Sicherheitsmetadaten aus dem Cloud Storage-Bucket assuredoss-metadata zugreifen. Eine Beschreibung der Sicherheits
metadaten finden Sie unter
Felder für Sicherheitsmetadaten.
Dieses Dokument gilt nur für die Premium-Dienststufe von Assured OSS. Informationen zur kostenlosen Dienststufe finden Sie unter Signaturen in der kostenlosen Dienststufe von Assured OSS überprüfen.
Hinweis
Assured OSS in Security Command Center einbinden.
Verbindung validieren zu Assured OSS 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,golang, oderjavascript. Der Wert muss in Kleinbuchstaben geschrieben werden. Package_ID::einer der folgenden Werte:
- Java:
groupId:artifactId - Python:
packageName - JavaScript: einer der folgenden Werte:
@org-name/package-name,@username/package-nameoderpackage-name - Go:
packageName
Der Wert muss in Kleinbuchstaben geschrieben 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-URL für Python:
gs://assuredoss-metadata/python/blessed/1.20.0/metadata.jsonBeispiel-URL für Java:
gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.jsonBeispiel-URL für JavaScript:
gs://assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.jsonBeispiel-URL für Go:
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-URL für Python:
https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.jsonBeispiel-URL für Java:
https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.jsonBeispiel-URL für JavaScript:
https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.jsonBeispiel-URL für Go:
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 jetzt die Signaturen überprüfen. Dazu haben Sie zwei Möglichkeiten:
- Signaturen mit dem Tool „aoss-verifier“ überprüfen
- Signaturen heruntergeladener Pakete manuell überprüfen
Signaturen heruntergeladener Pakete mit dem Tool „aoss-verifier“ überprüfen
Verwenden Sie das Tool aoss-verifier, um Paketmetadaten zu überprüfen.
Installieren Sie Go, bevor Sie dieses Tool verwenden.
Installieren Sie das Tool „aoss-verifier“.
Exportieren Sie
$(go env GOPATH)/bin.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 sindpremiuminfo.LANGUAGE: Die Sprache des Pakets. Der Wert muss in Kleinbuchstaben geschrieben werden.PACKAGE_ID: Für Java ist das FormatgroupId:artifactId. Für Python und Go ist das FormatpackageName. Der Wert muss in Kleinbuchstaben geschrieben werden.VERSION: Die Version des Pakets.
--disable_certificate_verificationist ein optionales Flag, mit dem die Zuordnung des untergeordneten Zertifikats zum Root-Zertifikat über die Zertifikatskette übersprungen wird, wenn es verwendet wird.--temp_downloads_pathist ein optionales Flag, mit dem Sie den Pfad festlegen können, in den Sie die Dateien herunterladen möchten (ersetzen SieTEMP_DOWNLOADS_DIR_PATH). Wenn das Flag nicht festgelegt ist, werden die Dateien in den Ordnertmp_downloadsim aktuellen Verzeichnis heruntergeladen.--disable_deletesist ein optionales Flag, mit dem die heruntergeladenen Dateien beibehalten werden. Standardmäßig werden alle heruntergeladenen Dateien vom Tool bereinigt.
Weitere Informationen finden Sie in der README.
Signaturen heruntergeladener Pakete manuell überprüfen
Sie können die Artefaktsignatur nur für die Binärdateien überprüfen, die sicher von Assured OSS erstellt wurden, nicht für die, die von Assured OSS über Proxys bereitgestellt werden.
Zum manuellen Überprüfen von Signaturen können Sie verschiedene Tools verwenden. 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.
Laden Sie die Metadatendatei herunter. Wie unter Felder für Sicherheitsmetadaten, beschrieben, enthält die Metadatendatei ein
SBOMFeld imbuildInfoFeld. 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 bestimmen.Wenn der Artefaktname beispielsweise
artifact_nameist, lautet diespdx_idSPDXRef-Package-artifact_name. Zum Validieren eines Pakets mit dem Namengradio-3.30.0-py3-none-any.whllautet diespdx_idSPDXRef-Package-gradio-3.30.0-py3-none-any.whl.Extrahieren Sie den SHA‑256-Hashwert 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-ID.
Berechnen Sie den Artefakthashwert:
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 Werten gibt:
diff actualDigest.txt expectedDigest.txt
Wenn es keinen Unterschied gibt, erfolgt keine Ausgabe.
Extrahieren Sie den Hashwert 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 Hashwerts 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 Hashwerts mit dem extrahierten öffentlichen Schlüssel:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Wenn der Vorgang erfolgreich war, gibt dieser Befehl
Signature Verified Successfullyzurück. Sie können jetzt das Zertifikat überprüfen.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
Überprüfen Sie das Zertifikat mit dem extrahierten Zertifikat und dem Root-Zertifikat:
openssl verify -verbose -CAfile ca.crt cert.pem
Wenn der Vorgang erfolgreich war, gibt dieser Befehl
cert.pem: OKzurück.
Signaturen für Felder für Sicherheitsmetadaten überprüfen
Sie können die Signatur der folgenden Felder in der Sicherheitsmetadatendatei unabhängig voneinander überprüfen:
buildInfovexInfohealthInfo(falls vorhanden)
Die Daten in den Feldern werden mit SHA‑256 gehasht und dann wird der Hash 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 überprü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 (1.7.1 oder höher) verwendet, um die Signaturen unter Linux zu überprüfen.
Generieren Sie den SHA‑256-Hashwert des Felds:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Extrahieren Sie den Hashwert des Felds, der in der Datei
metadata.jsonangegeben ist:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
Prüfen Sie, ob es Unterschiede zwischen den beiden Hashwerten gibt:
diff actualDigest.txt expectedDigest.txt
Wenn es keinen Unterschied gibt, erfolgt keine Ausgabe. Das ist der Idealfall. Sie können jetzt die Signatur überprüfen.
Extrahieren Sie den Hashwert 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 Hashwerts 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 Hashwerts mit dem extrahierten öffentlichen Schlüssel:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Wenn die Überprüfung erfolgreich ist, gibt dieser Befehl
Signature Verified Successfullyzurück. Sie können jetzt das Zertifikat überprüfen.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 (
ca.crtim folgenden Befehl):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Überprüfen Sie das Zertifikat mit dem extrahierten Zertifikat und dem Root-Zertifikat:
openssl verify -verbose -CAfile ca.crt cert.pem
Wenn der Vorgang erfolgreich war, gibt der Befehl
cert.pem: OKzurück.