本页介绍了如何访问 assuredoss-metadata
Cloud Storage 存储桶中的安全元数据。如需了解安全元数据的说明,请参阅安全元数据字段。
本页面仅适用于 Assured OSS 高级层级。对于免费层级,请参阅在 Assured OSS 免费层级中验证签名。
准备工作
提取元数据
您可以使用 gcloud
或 curl
命令下载元数据。使用以下信息构建这两个网址:
- 语言:
java
、python
或javascript
。该值必须小写。 - Package_ID::对于 Java,值为
groupId:artifactId
;对于 Python 是packageName
,而对于 JavaScript,是@org-name/package-name
、@username/package-name
、 或package-name
。该值必须为小写。 - 版本:软件包的版本。
网址必须采用以下格式:
gcloud
gs://assuredoss-metadata/language/package_id/version/metadata.json
网址必须小写。
Python 网址示例:gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
Java 示例网址:gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
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
网址必须采用小写字母。
Python 网址示例:https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
Java 网址示例:https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
JavaScript 网址示例:https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
- 下载元数据:
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
您现在可以验证签名了。具体有两种方案可供选择:
使用 aoss-verifier 工具验证已下载软件包的签名
使用 aoss-verifier
工具验证软件包元数据。
在使用此工具之前,请先安装 Go。
安装 aoss-verifier 工具。
导出
$(go env GOPATH)/bin
。运行
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]
替换以下内容:
TYPE
:可能的值为premiuminfo
。LANGUAGE
:软件包语言。值必须采用小写字母。PACKAGE_ID
:对于 Java,格式为groupId:artifactId
。对于 Python,格式为packageName
。该值必须为小写。VERSION
:软件包的版本。
--disable_certificate_verification
是一个可选标志,用于跳过通过证书链将叶证书与根证书进行匹配(如果使用)。--temp_downloads_path
是一个可选标志,用于设置要 下载文件(替换TEMP_DOWNLOADS_DIR_PATH
)。 如果未设置此标志,系统会将文件下载到以下位置的tmp_downloads
文件夹中: 当前目录中。--disable_deletes
是一个可选标志,用于保留下载的文件。修改者 默认情况下,该工具会清除所有下载的文件。
如需了解详情,请参阅README。
手动验证下载的软件包的签名
您只能为安全可靠的二进制文件验证工件签名 由 Assured OSS 构建而成,而非由 通过代理使用 Assured OSS。
如需手动验证签名,您可以使用各种工具。以下步骤使用 gcloud CLI、OpenSSL(版本 3.0.1 或更高版本)和 jq(1.7.1 或更高版本)在 Linux 上验证签名。
下载元数据文件。如安全元数据字段中所述,元数据文件在
buildInfo
字段中包含SBOM
字段。SBOM 包含构建的工件(例如 JAR 或 EGG 文件)以及表示签名的注释。通过此工件,您可以确定 SPDX ID。例如,如果工件名称为
artifact_name
,则spdx_id
为SPDXRef-Package-artifact_name
。如需验证名为gradio-3.30.0-py3-none-any.whl
的软件包,spdx_id
为SPDXRef-Package-gradio-3.30.0-py3-none-any.whl
。从元数据文件中提取 SHA-256 摘要:
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
替换以下内容:
METADATA_FILENAME
: 安全元数据文件。SPDX_ID
:SPDX 标识符。
计算工件摘要:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
将
ARTIFACT_FILE
替换为工件文件的名称。检查两者之间是否存在任何区别:
diff actualDigest.txt expectedDigest.txt
如果没有差异,则不会输出任何内容。
将字段的摘要提取到
.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
将摘要签名提取到
.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
将公钥证书提取到
.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
使用证书验证摘要的签名:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
如果成功,此命令会返回
Signature Verified Successfully
。您现在可以验证证书了。将公钥证书链提取到
.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
下载根证书(以下命令中的
ca.crt
):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
使用证书链和根证书验证证书:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
如果成功,此命令将返回
pubKey.pem: OK
。
验证安全元数据字段的签名
您可以验证安全元数据中以下字段的签名 文件:
buildInfo
vexInfo
healthInfo
(如果存在)
系统会使用 SHA-256 算法对字段中的数据进行哈希处理,然后再进行签名 使用 ECDSAP256_DER 算法。证书和证书链 以便在元数据内提供,以便您验证签名。使用以下根证书验证证书链:
https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
您可以手动验证签名,也可以使用 Assured OSS Verifier Tool。
以下步骤介绍了如何手动验证
metadata.json
文件中的 buildInfo
字段。您可以使用类似的步骤
验证 vexInfo
字段或 healthInfo
字段的签名。
您可以使用各种工具验证签名。以下示例使用 gcloud CLI、OpenSSL(版本 3.0.1 或更高版本)和 jq (1.7.1 或更高版本)验证 Linux 系统上的签名。
生成该字段的 SHA-256 摘要:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
提取
metadata.json
文件中提供的字段的摘要:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
检查这两个摘要之间是否存在任何差异:
diff actualDigest.txt expectedDigest.txt
如果没有差异,则没有输出,这就是 理想情况。您现在可以验证签名了。
将字段的摘要提取到
.bin
文件:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
将摘要签名提取到
.sig
文件中:cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
将公钥证书提取到
.pem
文件:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
使用证书验证摘要的签名:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
如果验证成功,此命令将返回
Signature Verified Successfully
。您现在可以验证证书了。将公钥证书提取到
.pem
文件:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
将公钥证书链提取到
.pem
文件中:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
下载以下命令中名为
ca.crt
的根证书:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
使用证书链和根验证证书 证书:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
如果成功,该命令会返回
pubKey.pem: OK
。