Verificar assinaturas no nível sem custo financeiro do Assured OSS

Nesta página, explicamos como verificar a assinatura nos artefatos do Assured OSS.

Esta página se aplica apenas ao nível sem custo financeiro. Para o nível premium, consulte Acessar metadados de segurança e verificar pacotes.

Verificação de pacote

As assinaturas de pacote são armazenadas separadamente do pacote em um bucket do Cloud Storage no formato zip. É possível verificar as assinaturas usando a ferramenta de verificação do OSS garantido (aoss-verifier) ou um script de verificação.

Como usar a ferramenta aoss-verifier

Antes de usar essa ferramenta, verifique se o Go está instalado no seu sistema. Se o Go não estiver instalado, faça isso no site do Go.

  1. Para verificar a autenticidade e a integridade dos pacotes de software de código aberto, instale a ferramenta aoss-verifier (link em inglês).

  2. Exporte $(go env GOPATH)/bin e execute o comando 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]
    

    Substitua:

    • LANGUAGE: a linguagem do pacote de programação, java ou python. O valor precisa estar em letras minúsculas.
    • PACKAGE_ID: para Java, é groupId:artifactId e para Python é packageName. O valor precisa estar em letras minúsculas.
    • VERSION: a versão do pacote.
    • ARTIFACT_PATH: o caminho para o arquivo de dados no diretório local que você quer verificar. Use as seguintes extensões de nome de arquivo:
      • Extensão de arquivo jar para um pacote Java
      • Extensão de arquivo whl para um pacote Python.

    --disable_certificate_verification é uma flag opcional que ignora a correspondência do certificado de folha com o certificado raiz pela cadeia de certificados, se usada.

    --temp_downloads_path é uma flag opcional para definir o caminho em que você quer fazer o download dos arquivos. (substitua TEMP_DOWNLOADS_DIR_PATH). Se essa flag não estiver definida, os arquivos serão baixados para a pasta tmp_downloads no diretório atual.

    --disable_deletes é uma flag opcional que mantém os arquivos baixados. Por padrão, a ferramenta limpa todos os arquivos baixados.

Consulte o README para mais informações.

Usar o script de verificação

Nesta seção, descrevemos como usar um script de verificação para verificar as assinaturas dos pacotes baixados.

Etapa 1: extrair o URL de assinatura

O URL do arquivo ZIP está disponível nos metadados de segurança de cada pacote. O exemplo a seguir é uma amostra dos metadados do Container Analysis.

Como mostrado no exemplo a seguir, você pode encontrar o URL do zip da assinatura no campo description: digestUrl.

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}"
  }
}

Exemplo de metadados do Cloud Storage (buildInfo.json file). Como mostrado no exemplo a seguir, é possível extrair o URL do zip de assinatura do campo externalRefs : referenceLocator.

"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"
                }
            ],

É possível usar o zip de assinatura local para verificação manual ou o URL do Cloud Storage diretamente para usar o script de verificação. Siga estas etapas para fazer o download do arquivo signature.zip:

  1. Configure a autenticação usando Application Default Credentials (ADC).

  2. Faça o download do signature.zip usando o seguinte comando:

      gcloud storage cp SIGNATURE_ZIP_URL PATH_TO_LOCAL_STORE --recursive
    

    Substitua:

    • SIGNATURE_ZIP_URL: o URL do ZIP de assinatura.
    • PATH_TO_LOCAL_STORE: o caminho local onde você quer baixar o arquivo.

Etapa 2: acessar o certificado raiz

Para acessar o certificado raiz, use o seguinte URL:

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

Você pode fazer o download do certificado localmente ou usar o link dele diretamente. Para fazer o download do certificado, execute o seguinte comando:

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

Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer fazer o download do certificado.

Etapa 3: encontrar o local do arquivo do pacote

O arquivo que vamos verificar é o jar para pacotes Java e o arquivo wheel para pacotes Python. Esse arquivo seria o PATH_TO_DATA_FILE para verificação.

Etapa 4: verificação

É possível verificar manualmente o zip de assinatura seguindo as etapas em verificação manual de assinatura ou usar o script de verificação.

Para verificar usando o script de verificação, execute os seguintes comandos:

  1. Baixe o script de verificação e conceda permissões.

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. Execute o script de verificação e confira. É possível usar os URLs remotos ou caminhos locais para o zip de assinatura e o certificado raiz.

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

    Substitua:

    • PATH_TO_DATA_FILE com o caminho para o arquivo de pacote identificado na etapa 3
    • SIGNATURE_ZIP_URL com o URL ZIP da assinatura obtido na etapa 1.
    • ROOT_CERT_URL com o URL do certificado raiz obtido na etapa 2.

Verificação de metadados

Nesta seção, explicamos como verificar a assinatura nos metadados do Assured OSS acessados usando o Cloud Storage.

Usar a ferramenta aoss-verifier

Use a ferramenta aoss-verifier para verificar os metadados.

Antes de usar essa ferramenta, instale o Go.

  1. Instale a ferramenta aoss-verifier.

  2. Exporte $(go env GOPATH)/bin e execute o comando 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]
    

    Substitua:

    • TYPE: os valores possíveis são buildinfo, vexinfo e healthinfo.
    • LANGUAGE: a linguagem do pacote de programação, java ou python. O valor precisa estar em letras minúsculas.
    • PACKAGE_ID: para Java, o formato é groupId:artifactId. Para Python, o formato é packageName. O valor precisa estar em letras minúsculas.
    • VERSION: a versão do pacote.

    --disable_certificate_verification é uma flag opcional que ignora a correspondência do certificado de folha com o certificado raiz pela cadeia de certificados, se usada.

    --temp_downloads_path é uma flag opcional para definir o caminho em que você quer baixar os arquivos (substitua TEMP_DOWNLOADS_DIR_PATH). Se essa flag não for definida, os arquivos serão baixados para a pasta tmp_downloads no diretório atual.

    --disable_deletes é uma flag opcional que mantém os arquivos baixados. Por padrão, a ferramenta limpa todos os arquivos baixados.

Para mais informações, consulte o README.

Usar o script de verificação

Nesta seção, descrevemos como usar um script de verificação para verificar o arquivo de metadados de segurança.

Etapa 1: extrair o arquivo ZIP de assinatura e o arquivo de metadados

Podemos acessar os metadados como em Acessar metadados. O arquivo de metadados estaria presente com o arquivo signature.zip.

Exemplo: conteúdo de buildInfo.zip

buildInfo.json
signature.zip

O buildInfo.json é o arquivo de metadados que precisa ser verificado, e o signature.zip é o ZIP de assinatura.

Etapa 2: acessar o certificado raiz

Use o seguinte link de URL para receber o certificado raiz:

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

Você pode fazer o download do certificado localmente ou usar o link dele diretamente. Para fazer o download do certificado, execute o seguinte comando:

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

Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer fazer o download do certificado.

Etapa 3: verificação

Você pode verificar o signature.zip usando a verificação manual ou usando o script de verificação.

Para verificar usando o script de verificação, execute os seguintes comandos:

  1. Baixe o script de verificação e conceda permissões.

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. Execute o script de verificação e confira. Use o caminho local do arquivo ZIP de assinatura. Para o certificado raiz, use o URL ou o caminho local. O arquivo de dados seria o arquivo de metadados que estamos verificando: buildInfo.json, vexInfo.json ou healthInfo.json.

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

    Substitua:

    • PATH_TO_DATA_FILE com o arquivo de metadados que estamos verificando, conforme obtido na etapa 1.

    • SIGNATURE_LOCAL_PATH com o URL ZIP da assinatura obtido na etapa 1.

    • ROOT_CERT_URL com o URL do certificado raiz obtido na etapa 2.

      Se você quiser usar um certificado local já baixado, use esta opção:

      --root_cert_local ROOT_CERT_LOCAL
      

      Substitua ROOT_CERT_LOCAL pelo caminho do certificado local.

Verificação de script utilitário

O Assured OSS fornece três scripts de utilidade. Esta seção descreve como verificar a assinatura nesses scripts.

Gerador de Python Requirements.txt

Acesse a assinatura deste arquivo em gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip. Você pode verificar o signature.zip usando a verificação manual ou usando o script de verificação. Para verificar rapidamente a assinatura usando o script de verificação, siga estas etapas:

  1. Configure a autenticação.

  2. Se você ainda não fez o download do arquivo de script do gerador requirements.txt, faça isso.

     gcloud storage cp "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh" . --recursive
    
  3. Extraia o certificado raiz. O link do URL é https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt Você pode fazer o download do certificado localmente ou usar o link dele diretamente. Para fazer o download do certificado, execute o seguinte comando:

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

    Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer baixar o certificado.

  4. Baixe o script de verificação, se ainda não tiver feito isso.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. Execute o script de verificação e confira.

    ./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
    

    Substitua:

    • PATH_TO_DATA_FILE com o caminho local do script generator.sh que queremos verificar, conforme obtido na etapa 2.
    • ROOT_CERT_URL com o URL do certificado raiz. Se você quiser usar um certificado local já baixado, execute o seguinte comando:
    –root_cert_local ROOT_CERT_LOCAL
    

    Substitua ROOT_CERT_LOCAL pelo caminho local do certificado raiz.

Script de verificação de assinatura

Acesse a assinatura deste arquivo em gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip. Você pode verificar o signature.zip usando a verificação manual ou usando o script de verificação. Para verificar rapidamente a assinatura usando o script de verificação, siga estas etapas:

  1. Configure a autenticação.

  2. Se você ainda não fez o download do arquivo de script de verificação de assinatura, faça isso.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  3. Extraia o certificado raiz. O link do URL é https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt Você pode fazer o download do certificado localmente ou usar o link dele diretamente. Comando para fazer o download do certificado:

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

    Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer baixar o certificado.

  4. Execute o script de verificação e confira.

    ./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
    

    Substitua:

    PATH_TO_DATA_FILE com o caminho local do script de verificação que queremos verificar, conforme obtido na etapa 2. ROOT_CERT_URL com o URL do certificado raiz. Se você quiser usar um certificado local já baixado, use esta opção:

    –root_cert_local ROOT_CERT_LOCAL
    

    Substitua ROOT_CERT_LOCAL pelo caminho local do certificado raiz.

Fazer o download do script de metadados

Acesse a assinatura deste arquivo em gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip. Você pode verificar o signature.zip usando a verificação manual ou usando o script de verificação. Para verificar rapidamente a assinatura usando o script de verificação, siga estas etapas:

  1. Configure a autenticação.

  2. Se você ainda não fez o download do arquivo de script download_metadata.py, faça isso agora.

    gcloud storage cp "gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py" . --recursive
    
  3. Extraia o certificado raiz. O link do URL é https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt Você pode fazer o download do certificado localmente ou usar o link dele diretamente.

    Para fazer o download do certificado, execute o seguinte comando:

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

    Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer baixar o certificado.

  4. Baixe o script de verificação.

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. Execute o script de verificação e confira.

    ./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
    

    Substitua:

    • PATH_TO_DATA_FILE com o caminho local do script download_metadata.py que queremos verificar, conforme obtido na etapa 2.
    • ROOT_CERT_URL com o URL do certificado raiz. Se você quiser usar um certificado local já baixado, execute o seguinte comando:
    –root_cert_local ROOT_CERT_LOCAL
    

    Substitua ROOT_CERT_LOCAL pelo caminho local do certificado raiz.

A seguir