Halaman ini menjelaskan cara mengakses metadata keamanan dari
Bucket Cloud Storage assuredoss-metadata
. Untuk deskripsi keamanan
metadata, lihat
Kolom metadata keamanan.
Halaman ini hanya berlaku untuk tingkat premium Assured OSS. Untuk paket gratis, lihat Memverifikasi tanda tangan di Assured OSS tanpa biaya tingkat tinggi.
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 menggunakan huruf kecil. - Package_ID: untuk Java, nilainya adalah
groupId:artifactId
, untuk Python adalahpackageName
, dan untuk JavaScript, ini adalah salah satu@org-name/package-name
,@username/package-name
, ataupackage-name
. Nilai harus dalam huruf kecil. - Version: versi paket.
URL tersebut 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
Verifikasi tanda tangan paket yang didownload menggunakan alat aoss-verifier
Gunakan alat aoss-verifier
untuk memverifikasi metadata paket.
Sebelum menggunakan alat ini, instal Go.
Instal 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 menggunakan 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 tanda opsional yang melewati pencocokan {i>leaf certificate<i} ke {i>root certificate<i} melalui rantai sertifikat, jika data--temp_downloads_path
adalah flag opsional untuk menetapkan jalur yang ingin Anda unduh file (gantiTEMP_DOWNLOADS_DIR_PATH
). Jika tanda tidak ditetapkan, file akan didownload ke foldertmp_downloads
di direktori saat ini.--disable_deletes
adalah tanda opsional yang menyimpan file yang didownload. Menurut secara {i>default<i}, alat ini akan membersihkan semua file yang diunduh.
Untuk informasi selengkapnya, lihat README.
Verifikasi tanda tangan paket yang didownload secara manual
Anda dapat memverifikasi tanda tangan artefak hanya untuk biner yang aman dibangun 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 lebih tinggi) untuk memverifikasi tanda tangan di Linux.
Mendownload metadata . Seperti yang dijelaskan dalam Mengakses metadata menggunakan Cloud Storage, file metadata berisi kolom
SBOM
di dalam kolombuildInfo
. SBOM berisi artefak (misalnya, file JAR atau EGG) yang dibuat 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 diberi namagradio-3.30.0-py3-none-any.whl
,spdx_id
merupakanSPDXRef-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 artefak .Periksa apakah ada perbedaan di antara keduanya:
diff actualDigest.txt expectedDigest.txt
Jika tidak ada perbedaan, berarti 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
di 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 sertifikat:
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 di metadata keamanan secara terpisah:
buildInfo
vexInfo
healthInfo
(jika ada)
Data di dalam kolom di-hash menggunakan SHA-256, lalu hash-nya ditandatangani menggunakan algoritma ECDSAP256_DER. Rantai sertifikat dan sertifikat yang 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 Anda dapat memverifikasi tanda tangan menggunakan Alat Pemverifikasi Assured OSS.
Langkah-langkah berikut menjelaskan cara
memverifikasi secara manual tanda tangan
Kolom buildInfo
dalam file metadata.json
. Anda dapat menggunakan
langkah-langkah serupa untuk
verifikasi 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 pada sistem Linux.
Buat ringkasan SHA-256 untuk kolom ini:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Ekstrak ringkasan kolom yang disediakan di
metadata.json
file:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
Periksa apakah ada perbedaan antara kedua ringkasan tersebut:
diff actualDigest.txt expectedDigest.txt
Jika tidak ada perbedaan maka tidak akan ada {i>output<i}, yang merupakan yang 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 root certificate, bernama
ca.crt
di 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 sertifikat:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Jika berhasil, perintah akan menampilkan
pubKey.pem: OK
.