Mengakses metadata keamanan dan memverifikasi paket

Halaman ini menjelaskan cara mengakses metadata keamanan dari Bucket Cloud Storage assuredoss-metadata. Untuk deskripsi keamanan metadata, lihat Metadata keamanan kolom.

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

Menyiapkan autentikasi.

Mengekstrak metadata

Anda dapat menggunakan perintah gcloud atau curl untuk mendownload metadata. Buat URL untuk keduanya menggunakan informasi berikut:

  • Bahasa: java, python, atau javascript. Nilai harus menggunakan huruf kecil.
  • Package_ID: untuk Java, nilainya adalah groupId:artifactId, untuk Python adalah packageName, dan untuk JavaScript, ini adalah salah satu @org-name/package-name, @username/package-name, atau package-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

  1. 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:

Verifikasi tanda tangan paket yang didownload menggunakan alat aoss-verifier

Gunakan alat aoss-verifier untuk memverifikasi metadata paket.

Sebelum menggunakan alat ini, instal Go.

  1. Instal aoss-verifier.

  2. Ekspor $(go env GOPATH)/bin.

  3. 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 adalah premiuminfo.
    • LANGUAGE: Bahasa paket. Nilai harus menggunakan huruf kecil.
    • PACKAGE_ID: Untuk Java, formatnya adalah groupId:artifactId. Untuk Python, formatnya adalah packageName. 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 (ganti TEMP_DOWNLOADS_DIR_PATH). Jika tanda tidak ditetapkan, file akan didownload ke folder tmp_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.

  1. Mendownload metadata . Seperti yang dijelaskan dalam Mengakses metadata menggunakan Cloud Storage, file metadata berisi kolom SBOM di dalam kolom buildInfo. 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 adalah SPDXRef-Package-artifact_name. Untuk memvalidasi paket yang diberi nama gradio-3.30.0-py3-none-any.whl, spdx_id merupakan SPDXRef-Package-gradio-3.30.0-py3-none-any.whl.

  2. 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.

  3. Hitung ringkasan artefak:

    sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
    

    Ganti ARTIFACT_FILE dengan nama artefak .

  4. Periksa apakah ada perbedaan di antara keduanya:

    diff actualDigest.txt expectedDigest.txt
    

    Jika tidak ada perbedaan, berarti tidak ada output.

  5. 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
    
  6. 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
    
  7. 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
    
  8. 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.

  9. 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
    
  10. 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
    
  11. 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.

  1. Buat ringkasan SHA-256 untuk kolom ini:

    cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
    
  2. Ekstrak ringkasan kolom yang disediakan di metadata.json file:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
    
  3. 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.

  4. Ekstrak ringkasan kolom ke file .bin:

    cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
    
  5. Ekstrak tanda tangan ringkasan ke file .sig:

    cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
    
  6. Ekstrak sertifikat publik ke file .pem:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout  > pubKey.pem
    
  7. 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.

  8. Ekstrak sertifikat publik ke file .pem:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout  > pubKey.pem
    
  9. Ekstrak rantai sertifikat publik ke file .pem:

    cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout  > pubKeyChain.pem
    
  10. 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
    
  11. 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.