Halaman ini menjelaskan cara mengakses metadata keamanan dari bucket Cloud Storage assuredoss-metadata
. Untuk deskripsi metadata
keamanan, lihat
Kolom metadata keamanan.
Halaman ini hanya berlaku untuk tingkat premium Assured OSS. Untuk paket gratis, lihat Memverifikasi tanda tangan di paket gratis Assured OSS.
Sebelum memulai
Mengekstrak metadata
Anda dapat menggunakan perintah gcloud
atau curl
untuk mendownload metadata.
Buat URL untuk keduanya menggunakan informasi berikut:
- Bahasa:
java
,python
, ataujavascript
. Nilai harus dalam huruf kecil. - Package_ID: untuk Java, adalah
groupId:artifactId
, untuk Python adalahpackageName
, dan untuk JavaScript, adalah salah satu dari@org-name/package-name
,@username/package-name
, ataupackage-name
. Nilai harus dalam huruf kecil. - Versi: versi paket.
URL harus memiliki format berikut:
gcloud
gs://assuredoss-metadata/language/package_id/version/metadata.json
URL harus dalam huruf kecil.
Contoh URL Python: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
Contoh URL Java: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Contoh URL JavaScript: 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
URL harus dalam huruf kecil.
Contoh URL Python: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
Contoh URL Java: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Contoh URL JavaScript: https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
- Download metadata:
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
Sekarang Anda dapat memverifikasi tanda tangan. Ada dua opsi:
- Memverifikasi tanda tangan menggunakan alat aoss-verifier
- Memverifikasi tanda tangan paket yang didownload secara manual
Memverifikasi tanda tangan paket yang didownload menggunakan alat aoss-verifier
Gunakan alat aoss-verifier
untuk memverifikasi metadata paket.
Sebelum menggunakan alat ini, instal Go.
Instal alat aoss-verifier.
Ekspor
$(go env GOPATH)/bin
.Jalankan perintah
aoss-verifier verify-metadata
.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]
Ganti kode berikut:
TYPE
: Nilai yang mungkin adalahpremiuminfo
.LANGUAGE
: Bahasa paket. Nilai harus dalam huruf kecil.PACKAGE_ID
: Untuk Java, formatnya adalahgroupId:artifactId
. Untuk Python, formatnya adalahpackageName
. Nilai harus dalam huruf kecil.VERSION
: Versi paket.
--disable_certificate_verification
adalah flag opsional yang melewati pencocokan sertifikat entitas akhir dengan root certificate melalui rantai sertifikat, jika digunakan.--temp_downloads_path
adalah tanda opsional untuk menetapkan jalur tempat Anda ingin mendownload file (gantiTEMP_DOWNLOADS_DIR_PATH
). Jika tanda tidak ditetapkan, file akan didownload ke foldertmp_downloads
di direktori saat ini.--disable_deletes
adalah flag opsional yang menyimpan file yang didownload. Secara default, alat ini akan menghapus semua file yang didownload.
Untuk informasi selengkapnya, lihat README.
Memverifikasi tanda tangan paket yang didownload secara manual
Anda hanya dapat memverifikasi tanda tangan artefak untuk biner yang di-build dengan aman oleh Assured OSS, bukan yang disediakan oleh Assured OSS melalui proxy.
Untuk memverifikasi tanda tangan secara manual, Anda dapat menggunakan berbagai alat. Langkah-langkah berikut menggunakan gcloud CLI, OpenSSL (versi 3.0.1 atau yang lebih tinggi), dan jq (1.7.1 atau yang lebih tinggi) untuk memverifikasi tanda tangan di Linux.
Download file metadata. Seperti yang dijelaskan dalam Kolom metadata keamanan, file metadata berisi kolom
SBOM
di dalam kolombuildInfo
. SBOM berisi artefak (misalnya, file JAR atau EGG) yang di-build bersama dengan anotasi yang mewakili tanda tangan. Artefak ini memungkinkan Anda menentukan ID SPDX.Misalnya, jika nama artefak adalah
artifact_name
,spdx_id
adalahSPDXRef-Package-artifact_name
. Untuk memvalidasi paket yang bernamagradio-3.30.0-py3-none-any.whl
,spdx_id
adalahSPDXRef-Package-gradio-3.30.0-py3-none-any.whl
.Ekstrak ringkasan SHA-256 dari file metadata:
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
Ganti kode berikut:
METADATA_FILENAME
: Nama file metadata keamanan Anda.SPDX_ID
: ID SPDX.
Hitung ringkasan artefak:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Ganti
ARTIFACT_FILE
dengan nama file artefak.Periksa perbedaan antara keduanya:
diff actualDigest.txt expectedDigest.txt
Jika tidak ada perbedaan, tidak ada output.
Ekstrak ringkasan kolom ke file
.bin
: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
Ekstrak tanda tangan ringkasan ke file
.sig
: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
Ekstrak sertifikat publik ke file
.pem
: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
Verifikasi tanda tangan ringkasan menggunakan sertifikat:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Jika berhasil, perintah ini akan menampilkan
Signature Verified Successfully
. Sekarang Anda dapat memverifikasi sertifikat.Ekstrak rantai sertifikat publik ke file
.pem
: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
Download root certificate (
ca.crt
dalam perintah berikut):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifikasi sertifikat menggunakan rantai sertifikat dan root certificate:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Jika berhasil, perintah ini akan menampilkan
pubKey.pem: OK
.
Memverifikasi tanda tangan untuk kolom metadata keamanan
Anda dapat memverifikasi tanda tangan kolom berikut dalam file metadata keamanan secara mandiri:
buildInfo
vexInfo
healthInfo
(jika ada)
Data di dalam kolom di-hash menggunakan SHA-256, lalu hash ditandatangani menggunakan algoritma ECDSAP256_DER. Sertifikat dan rantai sertifikat disediakan di dalam metadata sehingga Anda dapat memverifikasi tanda tangan. Gunakan root certificate berikut untuk memverifikasi rantai sertifikat:
https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Anda dapat memverifikasi tanda tangan secara manual atau menggunakan Alat Pengverifikasi OSS Terjamin.
Langkah-langkah berikut menjelaskan cara memverifikasi tanda tangan
kolom buildInfo
secara manual dalam file metadata.json
. Anda dapat menggunakan langkah serupa untuk
memverifikasi tanda tangan kolom vexInfo
atau kolom healthInfo
.
Anda dapat memverifikasi tanda tangan menggunakan berbagai alat. Contoh berikut menggunakan gcloud CLI, OpenSSL (versi 3.0.1 atau yang lebih baru), dan jq (1.7.1 atau yang lebih baru) untuk memverifikasi tanda tangan di sistem Linux.
Buat ringkasan SHA-256 kolom:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Ekstrak ringkasan kolom yang diberikan dalam file
metadata.json
:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
Periksa apakah ada perbedaan antara kedua ringkasan:
diff actualDigest.txt expectedDigest.txt
Jika tidak ada perbedaan, tidak akan ada output, yang merupakan kasus ideal. Sekarang Anda dapat memverifikasi tanda tangan.
Ekstrak ringkasan kolom ke file
.bin
:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
Ekstrak tanda tangan ringkasan ke file
.sig
:cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
Ekstrak sertifikat publik ke file
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Verifikasi tanda tangan ringkasan menggunakan sertifikat:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Jika verifikasi berhasil, perintah ini akan menampilkan
Signature Verified Successfully
. Sekarang Anda dapat memverifikasi sertifikat.Ekstrak sertifikat publik ke file
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Ekstrak rantai sertifikat publik ke file
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Download sertifikat root, bernama
ca.crt
dalam perintah berikut:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifikasi sertifikat menggunakan rantai sertifikat dan root certificate:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Jika berhasil, perintah akan menampilkan
pubKey.pem: OK
.