在 Assured OSS 免费层级中验证签名

本页面介绍了如何验证 Assured OSS 制品的签名。

本页面仅适用于免费层级。对于高级层级,请参阅访问安全元数据并验证软件包

包裹验证

软件包签名以 ZIP 格式存储在 Cloud Storage 存储桶中,与软件包分开存储。 您可以使用 Assured OSS 验证程序工具 (aoss-verifier) 或验证脚本来验证签名。

使用 aoss-verifier 工具

在使用此工具之前,请确保您的系统上已安装 Go。如果未安装 Go,请从 Go 网站安装 Go。

  1. 如需验证开源软件包的真实性和完整性,请安装 aoss-verifier 工具。

  2. 导出 $(go env GOPATH)/bin,然后运行 aoss-verifier verify-package 命令。

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    替换以下内容:

    • LANGUAGE:编程软件包语言,javapython。值必须采用小写字母。
    • PACKAGE_ID:对于 Java,它是 groupId:artifactId;对于 Python,它是 packageName。值必须采用小写字母。
    • VERSION:软件包的版本。
    • ARTIFACT_PATH:您要验证的本地目录中的数据文件的路径。使用以下文件扩展名:
      • Java 软件包的 jar 文件扩展名
      • Python 软件包的 whl 文件扩展名

    --disable_certificate_verification 是一个可选标志,如果使用,则会跳过通过证书链将叶证书与根证书进行匹配。

    --temp_downloads_path 是一个可选标志,用于设置您要下载文件的路径。(将 TEMP_DOWNLOADS_DIR_PATH 替换为实际路径)。如果未设置此标志,则文件会下载到当前目录中的 tmp_downloads 文件夹。

    --disable_deletes 是一个可选标志,用于保留下载的文件。默认情况下,该工具会清理所有已下载的文件。

如需了解详情,请参阅README

使用验证脚本

本部分介绍了如何使用验证脚本来验证下载的软件包的签名。

第 1 步:获取签名网址

ZIP 文件的网址可在每个软件包的安全元数据中找到。以下示例来自 Container Analysis 元数据

如以下示例所示,您可以在 description: digestUrl 字段中找到签名 zip 网址。

package {
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    maintainer: "<nil>"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3.jar"
    description: "{\n \"artifactMetadataList\": [\n {\n \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3_binary_2022-10-12T06:54:05Z.zip\"\n }\n ]\n}"
  }
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3-sources.jar"
    description: "{\n  \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3-sources_source_2022-10-12T06:54:05Z.zip\"\n}"
  }
}

Cloud Storage 元数据 (buildInfo.json file) 中的示例。如以下示例所示,您可以从 externalRefsreferenceLocator 字段中获取签名 zip 网址。

"packages": [
        {
            "SPDXID": "SPDXRef-Package-logback-core-1.2.11.jar",
            "checksums": [
                {
                    "algorithm": "SHA256",
                    "checksumValue": "c847e0e310acda8bc1347c9d9cc051e91210b9f943e131fceb5034c2f0c9a5d8"
                }
            ],
            "downloadLocation": "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/ch/qos/logback/logback-core/1.2.11/logback-core-1.2.11.jar",
            "externalRefs": [
                {
                    "referenceCategory": "SECURITY",
                    "referenceLocator": "cpe:2.3:a:*:JAVA\\:\\:ch\\.qos\\.logback\\:logback\\-core:1\\.2\\.11:*:*:*:*:*:*:*",
                    "referenceType": "cpe23Type"
                },
                {
                    "referenceCategory": "OTHER",
                    "referenceLocator": "gs://cloud-aoss/java/ch.qos.logback:logback-core/1.2.11/logback-core-1.2.11_binary_2022-10-12T14:19:11Z.zip",
                    "referenceType": "digestURL"
                }
            ],

您可以使用本地签名 zip 文件进行手动验证,也可以直接使用 Cloud Storage 网址来使用验证脚本。您可以按照以下步骤下载 signature.zip 文件:

  1. 使用应用默认凭据 (ADC) 设置身份验证

  2. 使用以下命令下载 signature.zip

      gcloud storage cp SIGNATURE_ZIP_URL PATH_TO_LOCAL_STORE --recursive
    

    替换以下内容:

    • SIGNATURE_ZIP_URL:签名 ZIP 网址。
    • PATH_TO_LOCAL_STORE:您要下载文件的本地路径。

第 2 步:获取根证书

如需访问根证书,请使用以下网址:

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

您可以将证书下载到本地,也可以直接使用证书链接。 如需下载证书,请运行以下命令:

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

PATH_TO_LOCAL_STORE 替换为您要下载证书的本地路径。

第 3 步:获取软件包文件位置

我们将验证的文件是 Java 软件包的 JAR 文件和 Python 软件包的 Wheel 文件。该文件将作为验证的 PATH_TO_DATA_FILE

第 4 步:验证

您可以按照手动签名验证中的步骤手动验证签名 zip,也可以使用验证脚本

如需使用验证脚本进行验证,请运行以下命令:

  1. 下载验证脚本并授予权限。

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. 运行验证脚本并进行验证。您可以使用签名 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 替换为第 3 步中确定的软件包文件的路径
    • SIGNATURE_ZIP_URL 替换为在第 1 步中获得的签名 zip 网址。
    • ROOT_CERT_URL 替换为在第 2 步中获取的根证书网址。

元数据验证

本部分介绍了如何验证使用 Cloud Storage 访问的受保障的开源软件元数据的签名。

使用 aoss-verifier 工具

使用 aoss-verifier 工具验证元数据。

在使用此工具之前,请先安装 Go

  1. 安装 aoss-verifier 工具。

  2. 导出 $(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:可能的值包括 buildinfovexinfohealthinfo
    • LANGUAGE:编程软件包语言,javapython。值必须采用小写字母。
    • PACKAGE_ID:对于 Java,格式为 groupId:artifactId。对于 Python,格式为 packageName。值必须采用小写字母。
    • VERSION:软件包的版本。

    --disable_certificate_verification 是一个可选标志,如果使用,则会跳过通过证书链将叶证书与根证书进行匹配。

    --temp_downloads_path 是一个可选标志,用于设置您要将文件下载到的路径(替换 TEMP_DOWNLOADS_DIR_PATH)。如果未设置此标志,文件将下载到当前目录中的 tmp_downloads 文件夹。

    --disable_deletes 是一个可选标志,用于保留下载的文件。默认情况下,该工具会清理所有已下载的文件。

如需了解详情,请参阅自述文件

使用验证脚本

本部分介绍了如何使用验证脚本来验证安全元数据文件。

第 1 步:获取签名 ZIP 文件和元数据文件

我们可以按照访问元数据中的方式访问元数据。 元数据文件将与 signature.zip 文件一起提供。

示例 - buildInfo.zip 的内容

buildInfo.json
signature.zip

buildInfo.json 是需要验证的元数据文件,signature.zip 是签名 ZIP 文件。

第 2 步:获取根证书

使用以下网址链接获取根证书:

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

您可以将证书下载到本地,也可以直接使用证书链接。 如需下载证书,请运行以下命令:

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

PATH_TO_LOCAL_STORE 替换为您要下载证书的本地路径。

第 3 步:验证

您可以通过手动验证使用验证脚本来验证 signature.zip

如需使用验证脚本进行验证,请运行以下命令:

  1. 下载验证脚本并授予权限。

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. 运行验证脚本并进行验证。您应使用签名 zip 的本地路径。对于根证书,您可以使用网址或本地路径。数据文件将是我们正在验证的元数据文件 - buildInfo.jsonvexInfo.jsonhealthInfo.json

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_local_path SIGNATURE_LOCAL_PATH --root_cert_url ROOT_CERT_URL
    

    替换以下内容:

    • PATH_TO_DATA_FILE 与我们在第 1 步中获取的元数据文件。

    • SIGNATURE_LOCAL_PATH 替换为在第 1 步中获得的签名 zip 网址。

    • ROOT_CERT_URL 替换为在第 2 步中获取的根证书网址。

      如果您想使用已下载的本地证书,请改用此选项:

      --root_cert_local ROOT_CERT_LOCAL
      

      ROOT_CERT_LOCAL 替换为本地证书路径。

实用程序脚本验证

Assured OSS 提供三个实用程序脚本。本部分介绍了如何验证这些脚本上的签名。

Python Requirements.txt 生成器

您可以在 gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip 中查看此文件的签名。您可以使用手动验证使用验证脚本来验证 signature.zip。如需使用验证脚本快速验证签名,请按以下步骤操作:

  1. 设置身份验证

  2. 如果您尚未下载 requirements.txt 生成器脚本文件,请下载该文件。

     gcloud storage cp "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh" . --recursive
    
  3. 提取根证书。网址链接为 https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt 您可以将证书下载到本地,也可以直接使用证书链接。 如需下载证书,请运行以下命令:

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

    PATH_TO_LOCAL_STORE 替换为您要下载证书的本地路径

  4. 下载验证脚本(如果您尚未下载)。

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. 运行验证脚本并进行验证。

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip" --root_cert_url ROOT_CERT_URL
    

    替换以下内容:

    • PATH_TO_DATA_FILE 替换为在第 2 步中获得的要验证的 generator.sh 脚本的本地路径。
    • ROOT_CERT_URL 替换为根证书网址。如果您想使用已下载的本地证书,请运行以下命令:
    –root_cert_local ROOT_CERT_LOCAL
    

    ROOT_CERT_LOCAL 替换为根证书的本地路径。

签名验证脚本

您可以在 gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip 中查看此文件的签名。您可以使用手动验证使用验证脚本来验证 signature.zip。如需使用验证脚本快速验证签名,请按以下步骤操作:

  1. 设置身份验证

  2. 如果您尚未下载签名验证脚本文件,请下载该文件。

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  3. 提取根证书。网址链接为 https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt 您可以将证书下载到本地,也可以直接使用证书链接。 用于下载证书的命令:

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

    PATH_TO_LOCAL_STORE 替换为您要下载证书的本地路径

  4. 运行验证脚本并进行验证。

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip" --root_cert_url ROOT_CERT_URL
    

    替换以下内容:

    PATH_TO_DATA_FILE,其中包含我们在第 2 步中获取的要验证的验证脚本的本地路径。 将 ROOT_CERT_URL 替换为根证书网址。如果您想使用已下载的本地证书,请改用此选项:

    –root_cert_local ROOT_CERT_LOCAL
    

    ROOT_CERT_LOCAL 替换为根证书的本地路径。

下载元数据脚本

您可以在 gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip 中查看此文件的签名。您可以使用手动验证使用验证脚本来验证 signature.zip。如需使用验证脚本快速验证签名,请按以下步骤操作:

  1. 设置身份验证

  2. 如果您尚未下载 download_metadata.py 脚本文件,请下载该文件。

    gcloud storage cp "gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py" . --recursive
    
  3. 提取根证书。网址链接为 https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt 您可以将证书下载到本地,也可以直接使用证书链接。

    如需下载证书,请运行以下命令:

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

    PATH_TO_LOCAL_STORE 替换为您要下载证书的本地路径

  4. 下载验证脚本。

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. 运行验证脚本并进行验证。

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip --root_cert_url ROOT_CERT_URL
    

    替换以下内容:

    • PATH_TO_DATA_FILE 替换为在第 2 步中获得的要验证的 download_metadata.py 脚本的本地路径。
    • ROOT_CERT_URL 替换为根证书网址。如果您想使用已下载的本地证书,请运行以下命令:
    –root_cert_local ROOT_CERT_LOCAL
    

    ROOT_CERT_LOCAL 替换为根证书的本地路径。

后续步骤