Nesta página, descrevemos como acessar metadados de segurança do bucket do Cloud Storage assuredoss-metadata
. Para uma descrição dos metadados de segurança, consulte Campos de metadados de segurança.
Esta página se aplica apenas ao nível premium do Assured OSS. Para o nível gratuito, consulte Verificar assinaturas no nível gratuito do Assured OSS.
Antes de começar
Extrair os metadados
É possível usar os comandos gcloud
ou curl
para fazer o download dos metadados.
Construa o URL para ambos usando as seguintes informações:
- Idioma:
java
,python
oujavascript
. O valor precisa estar em letras minúsculas. - Package_ID: para Java, é
groupId:artifactId
. Para Python, épackageName
. Para JavaScript, é um dos seguintes:@org-name/package-name
,@username/package-name
oupackage-name
. O valor precisa estar em letras minúsculas. - Versão:a versão do pacote.
O URL precisa ter o seguinte formato:
gcloud
gs://assuredoss-metadata/language/package_id/version/metadata.json
O URL precisa estar em letras minúsculas.
Exemplo de URL do Python: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
Exemplo de URL em Java: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Exemplo de URL 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
O URL precisa estar em letras minúsculas.
Exemplo de URL do Python: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
Exemplo de URL em Java: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
Exemplo de URL JavaScript: https://storage.googleapis.com/assuredoss-metadata/javascript/@stoplight/spectral-core/0.0.0/metadata.json
- Faça o download dos metadados:
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
Agora você pode verificar as assinaturas. Existem duas opções:
- Verificar as assinaturas usando a ferramenta aoss-verifier
- Verificar manualmente as assinaturas dos pacotes baixados
Verificar as assinaturas dos pacotes baixados usando a ferramenta aoss-verifier
Use a ferramenta aoss-verifier
para verificar os metadados do pacote.
Antes de usar essa ferramenta, instale o Go.
Instale a ferramenta aoss-verifier.
Exporte
$(go env GOPATH)/bin
.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ãopremiuminfo
.LANGUAGE
: o idioma do pacote. 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 (substituaTEMP_DOWNLOADS_DIR_PATH
). Se a flag não estiver definida, os arquivos serão baixados para a pastatmp_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.
Verificar manualmente as assinaturas dos pacotes baixados
É possível verificar a assinatura do artefato apenas para os binários criados com segurança pelo Assured OSS, não para os fornecidos por ele usando proxies.
Para verificar assinaturas manualmente, use várias ferramentas. As etapas a seguir usam a CLI gcloud, o OpenSSL (versão 3.0.1 ou mais recente) e jq (1.7.1 ou mais recente) para verificar as assinaturas no Linux.
Faça o download do arquivo de metadados. Conforme descrito em Campos de metadados de segurança, o arquivo de metadados contém um campo
SBOM
dentro do campobuildInfo
. A lista de materiais de software contém o artefato (por exemplo, um arquivo JAR ou EGG) criado com uma anotação que representa a assinatura. Com esse artefato, é possível determinar o ID do SPDX.Por exemplo, se o nome do artefato for
artifact_name
, ospdx_id
seráSPDXRef-Package-artifact_name
. Para validar um pacote chamadogradio-3.30.0-py3-none-any.whl
, ospdx_id
éSPDXRef-Package-gradio-3.30.0-py3-none-any.whl
.Extraia o resumo SHA-256 do arquivo de metadados:
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
Substitua:
METADATA_FILENAME
: o nome do arquivo de metadados de segurança.SPDX_ID
: o identificador SPDX.
Calcule o resumo do artefato:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Substitua
ARTIFACT_FILE
pelo nome do arquivo de artefato.Verifique se há diferenças entre os dois:
diff actualDigest.txt expectedDigest.txt
Se não houver diferença, não haverá saída.
Extraia o resumo do campo para um arquivo
.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
Extraia a assinatura do resumo para um arquivo
.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
Extraia a chave pública do certificado público para um arquivo
.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
Verifique a assinatura do resumo usando a chave pública extraída:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se o comando for bem-sucedido, ele vai retornar
Signature Verified Successfully
. Agora você pode verificar o certificado.Extraia o certificado público para um arquivo
.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' > cert.pem
Faça o download do certificado raiz (
ca.crt
no comando a seguir):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifique o certificado usando o certificado extraído e o certificado raiz:
openssl verify -verbose -CAfile ca.crt cert.pem
Se o comando for bem-sucedido, ele vai retornar
cert.pem: OK
.
Verificar as assinaturas dos campos de metadados de segurança
É possível verificar a assinatura dos seguintes campos no arquivo de metadados de segurança de forma independente:
buildInfo
vexInfo
healthInfo
(se presente)
Os dados nos campos são criptografados com hash usando SHA-256, e depois o hash é assinado usando o algoritmo ECDSAP256_DER. O certificado e a cadeia de certificados são fornecidos nos metadados para que você possa verificar a assinatura. Use o seguinte certificado raiz para verificar a cadeia de certificados:
https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
É possível verificar as assinaturas manualmente ou usando a ferramenta de verificação do OSS garantido.
As etapas a seguir descrevem como verificar manualmente a assinatura do campo
buildInfo
no arquivo metadata.json
. Você pode usar etapas semelhantes para
verificar a assinatura do campo vexInfo
ou healthInfo
.
Você pode verificar assinaturas usando várias ferramentas. O exemplo a seguir usa a CLI gcloud, o OpenSSL (versão 3.0.1 ou mais recente) e o jq (1.7.1 ou mais recente) para verificar as assinaturas em um sistema Linux.
Gere o resumo SHA-256 do campo:
cat metadata.json | jq -rj '.buildInfo' | sha256sum | cut -d ' ' -f1 > actualDigest.txt
Extraia o resumo do campo fornecido no arquivo
metadata.json
:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 > expectedDigest.txt
Verifique se há diferenças entre os dois resumos:
diff actualDigest.txt expectedDigest.txt
Se não houver diferença, não haverá saída, o que é o caso ideal. Agora você pode verificar a assinatura.
Extraia o resumo do campo para um arquivo
.bin
:cat metadata.json | jq -rj '.buildInfoSignature.digest[0].digest' | cut -d ':' -f2 | xxd -r -p > digest.bin
Extraia a assinatura do resumo para um arquivo
.sig
:cat metadata.json | jq -rj '.buildInfoSignature.signature[0].signature' | xxd -r -p > sig.sig
Extraia a chave pública do certificado público para um arquivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' | openssl x509 -pubkey -noout > pubKey.pem
Verifique a assinatura do resumo usando a chave pública extraída:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se a verificação for bem-sucedida, esse comando vai retornar
Signature Verified Successfully
. Agora você pode verificar o certificado.Extraia o certificado público para um arquivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.cert' > cert.pem
Faça o download do certificado raiz, chamado
ca.crt
no comando a seguir:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifique o certificado usando o certificado extraído e o certificado raiz:
openssl verify -verbose -CAfile ca.crt cert.pem
Se o comando for bem-sucedido, ele vai retornar
cert.pem: OK
.