Assured OSS 構件簽章總覽

Assured Open Source Software 提供套件、套件中繼資料和公用程式指令碼。每個 Assured OSS 套件都會使用個別的 Google 簽發憑證簽署,該憑證會使用 ECDSA P256 演算法產生金鑰。每個套件中繼資料和公用程式指令碼也會使用單一 Google 簽發的憑證簽署,該憑證使用 ECDSA P256 演算法產生金鑰。這些憑證是透過憑證授權單位服務核發,對應的公開根憑證則位於 Cloud Storage bucket 中。

本文適用於免費方案。如要瞭解進階層級的簽章,請參閱「存取安全性中繼資料並驗證套件」。

簽名檔總覽

簽章會儲存在 signature.zip 檔案中。signature.zip 檔案包含下列檔案:

  • digest.txt:這個檔案會以十六進位編碼格式儲存雜湊演算法和套件摘要。請參閱以下範例:

    SHA-256:c5feab6f4de0878e94cf2a3074039b4f16a0c93a03501f047ee6eea29a8e33e0`.
    
  • signature.txt:這個檔案會儲存簽名演算法和以十六進位編碼的簽名。請參閱以下範例:

    ECDSAP256_DER:30450220585d2a01f20de98dfe6cfab2c01a8f11787dbafbc6541304d23cc582e61be016022100f05a19f5ce473144579dfefc47905fd650584a1c7a31bd9d5bf93ecce739a7cb`
    
  • cert.pem:這個檔案會儲存公開憑證。

  • certChain.pem:這個檔案會儲存公開憑證的憑證鏈。

驗證簽章

您可以使用下列任一方法驗證簽章:

使用 aoss-verifier 工具驗證簽章

  1. 如要驗證開放原始碼軟體套件的真實性和完整性,請安裝 aoss-verifier 工具。

  2. 如要驗證套件,請使用 --language--package_id--version--artifact_path 旗標,傳遞 LANGUAGEPACKAGE_IDVERSION 值,以及要驗證的 PATH_TO_DATA_FILE

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH
    

    更改下列內容:

    • LANGUAGE:套件語言。值必須為小寫。
    • PACKAGE_ID:如果是 Java,格式為 groupId:artifactId。如果是 Python,格式為 packageName。值必須為小寫。
    • VERSION:套件版本。
    • ARTIFACT_PATH:要驗證的本機目錄中資料檔案路徑。請使用下列副檔名:
      • Java 套件的 jar 副檔名
      • Python 套件的 whl 副檔名

手動驗證簽章

如要手動驗證簽章,請按照下列步驟操作:

  1. 安裝 Google Cloud CLI 和 OpenSSL 軟體 (3.0.1 以上版本)。

  2. 驗證摘要。

    1. 找出雜湊演算法。digest.txt 檔案包含用於計算摘要的雜湊演算法。使用下列指令找出雜湊演算法:

      cut -d ':' -f1 digest.txt
      

      確認輸出內容為 SHA256

    2. 計算資料檔案的摘要。視使用的雜湊演算法而定,您可以使用各種指令列工具計算資料檔案的摘要。針對 Assured OSS 資料檔案和指令碼,請使用 SHA-256 雜湊演算法產生摘要。

      在 Linux 中,請使用下列指令計算雜湊:

      sha256sum PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      

      如要驗證套件,請將 PATH_TO_DATA_FILE 替換為本機目錄中套件的驗證路徑。

      如要驗證中繼資料,請將 PATH_TO_DATA_FILE 替換為中繼資料檔案名稱。例如 buildInfo.jsonvexInfo.jsonhealthInfo.json

      在 macOS 中,請使用下列指令:

      shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      
    3. 使用下列指令從 digest.txt 檔案擷取雜湊值:

      cut -d ':' -f2 digest.txt > signaturedigest.txt
      
    4. 使用下列指令比較這兩個摘要:

      diff datadigest.txt signaturedigest.txt
      

      如果沒有差異,就不會輸出任何內容。

  3. 驗證簽名

    1. 使用下列指令,從 cert.pem 取得公開金鑰:

      openssl x509 -pubkey -noout -in cert.pem  > pubkey.pem
      
    2. 使用下列指令,以二進位格式擷取簽章 (如果沒有 xxd 指令,請安裝):

      cut -d ':' -f2 signature.txt | xxd -r -p > sig.sig
      
    3. 使用下列指令,以二進位格式擷取摘要:

      cut -d ':' -f2 digest.txt | xxd -r -p > digest.bin
      
    4. 使用下列任一指令驗證簽章:

      選項 1

      openssl pkeyutl -in digest.bin -inkey pubkey.pem -pubin -verify -sigfile sig.sig
      

      指令傳回下列輸出內容:

      Signature Verified Successfully

      選項 2

      openssl dgst -sha256 -verify pubkey.pem -signature sig.sig PATH_TO_DATA_FILE
      

      PATH_TO_DATA_FILE 替換為本機目錄中資料檔案的路徑。

      指令傳回下列輸出內容:

      Verified OK

  4. 驗證憑證

    如要驗證憑證,請執行下列指令:

    openssl verify -verbose -CAfile ca.crt -untrusted certChain.pem cert.pem
    

    ca.cert 是根憑證,可使用下列指令下載:

    curl -o PATH_TO_LOCAL_STORE https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    成功後會傳回下列輸出內容:

    cert.pem: OK

使用指令碼驗證簽章

如要使用驗證指令碼驗證簽章,請按照下列步驟操作:

  1. 下載驗證指令碼。

    1. 使用應用程式預設憑證 (ADC) 設定驗證

    2. 使用下列指令下載 signatureverification.shREADME.mdsignature.zip,以取得驗證指令碼:

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0" PATH_TO_LOCAL_STORE --recursive
      

      PATH_TO_LOCAL_STORE 替換為您要下載檔案的本機路徑。

      您也可以使用驗證指令碼執行公用程式指令碼驗證

  2. 請按照下列步驟執行指令碼:

    1. 安裝 Google Cloud CLI 和 OpenSSL 軟體 (3.0.1 以上版本)。

    2. 使用有權存取 Assured OSS 的服務帳戶進行驗證。

    3. 使用下列指令授予執行指令碼所需的權限:

      chmod +x signatureverification.sh
      
    4. 如果尚未下載 signature.zip 檔案,請使用下列指令執行指令碼:

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE \
      --signature_url SIGNATURE_ZIP_URL \
      --root_cert_url ROOT_CERT_URL
      

      更改下列內容:

      • PATH_TO_DATA_FILE:要驗證的本機目錄中資料檔案的路徑
      • SIGNATURE_ZIP_URL:簽章 ZIP 檔案的網址
      • ROOT_CERT_URL:公開根憑證網址

輸出內容範例

以下輸出內容表示驗證指令碼已順利執行。

Signature verification successful

Certificate verification successful

後續步驟