Auf dieser Seite wird beschrieben, wie Sie über den Cloud Storage-Bucket assuredoss-metadata
auf Sicherheitsmetadaten zugreifen. Eine Beschreibung der Sicherheitsmetadaten finden Sie unter Felder für Sicherheitsmetadaten.
Diese Seite gilt nur für die kostenpflichtige Version von Assured OSS. Informationen zur kostenlosen Stufe finden Sie unter Signaturen in der kostenlosen Stufe von Assured OSS prüfen.
Hinweise
Richten Sie die Authentifizierung ein.
Metadaten extrahieren
Zum Herunterladen der Metadaten können Sie die Befehle gsutil
oder curl
verwenden.
Erstellen Sie die URL für beide mithilfe der folgenden Informationen:
- Sprache:
java
,python
oderjavascript
. Der Wert muss in Kleinbuchstaben geschrieben werden. - Package_ID: Für Java ist dies
groupId:artifactId
, für PythonpackageName
und für JavaScript entweder@org-name/package-name
,@username/package-name
oderpackage-name
. Der Wert muss in Kleinbuchstaben geschrieben werden. - Version:Die Version des Pakets.
Die URL muss das folgende Format haben:
gsutil
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
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
- Laden Sie die Metadaten herunter:
gsutil
gsutil -m 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.
Installieren Sie das Tool aoss-verifier.
$(go env GOPATH)/bin
exportieren.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 sindpremiuminfo
.LANGUAGE
: Die Paketsprache. Der Wert muss in Kleinbuchstaben geschrieben werden.PACKAGE_ID
: Bei Java ist das FormatgroupId:artifactId
. Bei Python ist das FormatpackageName
. Der Wert muss in Kleinbuchstaben geschrieben werden.VERSION
: Die Version des Pakets.
--disable_certificate_verification
ist ein optionales Flag, das den Abgleich des untergeordneten Zertifikats mit dem Stammzertifikat über die Zertifikatskette (falls verwendet) überspringt.--temp_downloads_path
ist ein optionales Flag, um den Pfad festzulegen, unter dem Sie die Dateien herunterladen möchten (ersetztTEMP_DOWNLOADS_DIR_PATH
). Wenn das Flag nicht festgelegt ist, werden die Dateien in den Ordnertmp_downloads
im aktuellen Verzeichnis heruntergeladen.--disable_deletes
ist ein optionales Flag, das die heruntergeladenen Dateien behält. Standardmäßig bereinigt 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 von Assured OSS erstellt werden, nicht für die, die von Assured OSS über Proxys bereitgestellt werden.
Sie können verschiedene Tools verwenden, um Signaturen manuell zu überprüfen. 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 prüfen.
Laden Sie die Metadatendatei herunter. Wie unter Mit Cloud Storage auf Metadaten zugreifen beschrieben, enthält die Metadatendatei ein
SBOM
-Feld im FeldbuildInfo
. Das 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 Artefaktname beispielsweise
artifact_name
lautet, hatspdx_id
den WertSPDXRef-Package-artifact_name
. Zum Validieren eines Pakets mit dem Namengradio-3.30.0-py3-none-any.whl
lautet derspdx_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 Artefakt-Digest:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Ersetzen Sie
ARTIFACT_FILE
durch den Namen der Artefaktdatei.Prüfe, ob es Unterschiede zwischen den beiden gibt:
diff actualDigest.txt expectedDigest.txt
Wenn es keinen Unterschied gibt, gibt es 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 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
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.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
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
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 überprüfen
Sie können die Signatur der folgenden Felder in der Datei mit den Sicherheitsmetadaten unabhängig prüfen:
buildInfo
vexInfo
healthInfo
(falls vorhanden)
Die Daten in den Feldern werden mit SHA-256 gehasht. Anschließend wird der Hash mit dem Algorithmus ECDSAP256_DER signiert. Das Zertifikat und die Zertifikatskette werden innerhalb der Metadaten bereitgestellt, damit Sie die Signatur überprüfen können. Verwenden Sie das folgende Root-Zertifikat, um die Zertifikatskette zu verifizieren:
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 prüfen. Sie können ähnliche Schritte verwenden, um die Signatur des Felds vexInfo
oder healthInfo
zu prüfen.
Sie können Signaturen mit verschiedenen Tools überprüfen. Im folgenden Beispiel werden die Signaturen auf einem Linux-System mithilfe der gcloud CLI, OpenSSL (Version 3.0.1 oder höher) und jq (1.7.1 oder höher) überprüft.
Generieren Sie den SHA-256-Digest des Felds:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Extrahieren Sie den Digest 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 Unterschiede zwischen den beiden Digests vorliegen:
diff actualDigest.txt expectedDigest.txt
Wenn es keinen Unterschied gibt, gibt es auch keine Ausgabe, was der ideale Fall ist. 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 das öffentliche Zertifikat in eine
.pem
-Datei:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
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.Extrahieren Sie das öffentliche Zertifikat in eine
.pem
-Datei:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Extrahieren Sie die öffentliche Zertifikatskette in eine
.pem
-Datei:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
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
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.