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 工具
- 手動
- 驗證指令碼
使用 aoss-verifier 工具驗證簽章
如要驗證開放原始碼軟體套件的真實性和完整性,請安裝 aoss-verifier 工具。
如要驗證套件,請使用
--language、--package_id、--version和--artifact_path旗標,傳遞 LANGUAGE、PACKAGE_ID 和 VERSION 值,以及要驗證的 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副檔名
- Java 套件的
手動驗證簽章
如要手動驗證簽章,請按照下列步驟操作:
安裝 Google Cloud CLI 和 OpenSSL 軟體 (3.0.1 以上版本)。
驗證摘要。
找出雜湊演算法。
digest.txt檔案包含用於計算摘要的雜湊演算法。使用下列指令找出雜湊演算法:cut -d ':' -f1 digest.txt確認輸出內容為
SHA256。計算資料檔案的摘要。視使用的雜湊演算法而定,您可以使用各種指令列工具計算資料檔案的摘要。針對 Assured OSS 資料檔案和指令碼,請使用 SHA-256 雜湊演算法產生摘要。
在 Linux 中,請使用下列指令計算雜湊:
sha256sum PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt如要驗證套件,請將 PATH_TO_DATA_FILE 替換為本機目錄中套件的驗證路徑。
如要驗證中繼資料,請將 PATH_TO_DATA_FILE 替換為中繼資料檔案名稱。例如
buildInfo.json、vexInfo.json或healthInfo.json。在 macOS 中,請使用下列指令:
shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt使用下列指令從
digest.txt檔案擷取雜湊值:cut -d ':' -f2 digest.txt > signaturedigest.txt使用下列指令比較這兩個摘要:
diff datadigest.txt signaturedigest.txt如果沒有差異,就不會輸出任何內容。
驗證簽名
使用下列指令,從
cert.pem取得公開金鑰:openssl x509 -pubkey -noout -in cert.pem > pubkey.pem使用下列指令,以二進位格式擷取簽章 (如果沒有
xxd指令,請安裝):cut -d ':' -f2 signature.txt | xxd -r -p > sig.sig使用下列指令,以二進位格式擷取摘要:
cut -d ':' -f2 digest.txt | xxd -r -p > digest.bin使用下列任一指令驗證簽章:
選項 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
驗證憑證
如要驗證憑證,請執行下列指令:
openssl verify -verbose -CAfile ca.crt -untrusted certChain.pem cert.pemca.cert是根憑證,可使用下列指令下載:curl -o PATH_TO_LOCAL_STORE https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt成功後會傳回下列輸出內容:
cert.pem: OK
使用指令碼驗證簽章
如要使用驗證指令碼驗證簽章,請按照下列步驟操作:
下載驗證指令碼。
使用應用程式預設憑證 (ADC) 設定驗證。
使用下列指令下載
signatureverification.sh、README.md和signature.zip,以取得驗證指令碼:gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0" PATH_TO_LOCAL_STORE --recursive將 PATH_TO_LOCAL_STORE 替換為您要下載檔案的本機路徑。
您也可以使用驗證指令碼執行公用程式指令碼驗證。
請按照下列步驟執行指令碼:
安裝 Google Cloud CLI 和 OpenSSL 軟體 (3.0.1 以上版本)。
使用有權存取 Assured OSS 的服務帳戶進行驗證。
使用下列指令授予執行指令碼所需的權限:
chmod +x signatureverification.sh如果尚未下載
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