有保障的开源软件为您提供软件包、软件包元数据和实用脚本。每个 Assured OSS 软件包都使用单独的 Google 颁发证书进行签名,该证书使用 ECDSA P256 算法生成密钥。每个软件包元数据和实用程序脚本也使用由 Google 签发的单个证书进行签名,该证书使用 ECDSA P256 算法生成密钥。这些证书是使用 Certificate Authority Service 颁发的,相应的公共根证书可在 Cloud Storage 存储桶中找到。
本文档适用于免费层级。如需了解高级层级中的签名,请参阅访问安全元数据并验证软件包。
签名概览
签名存储在 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。计算数据文件的摘要。您可以根据所用的哈希算法,使用各种命令行工具计算数据文件的摘要。对于有保证的 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