Nesta página, descrevemos como acessar metadados de segurança do bucket assuredoss-metadata
do Cloud Storage. Para conferir uma descrição dos metadados
de segurança, consulte Campos de metadados
de segurança.
Esta página se aplica apenas ao nível pago do Assured OSS. Para saber mais sobre 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 gsutil
ou curl
para fazer o download dos metadados.
Crie o URL para ambos usando as seguintes informações:
- Idioma:
java
,python
oujavascript
. O valor precisa estar em minúsculas. - Package_ID::para Java, é
groupId:artifactId
, para Python épackageName
e, para JavaScript, é@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:
gsutil
gs://assuredoss-metadata/language/package_id/version/metadata.json
O URL precisa estar em minúsculas.
Exemplo de URL do Python: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
Exemplo de URL do 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 minúsculas.
Exemplo de URL do Python: https://storage.googleapis.com/assuredoss-metadata/python/blessed/1.20.0/metadata.json
Exemplo de URL do 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:
gsutil
gsutil -m 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 com a ferramenta aoss-verifier
- Verificar manualmente as assinaturas de pacotes transferidos por download
Use a ferramenta aoss-verifier para verificar as assinaturas dos pacotes transferidos por download.
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 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 na cadeia de certificados, se usado.--temp_downloads_path
é uma sinalização opcional para definir o caminho em que você quer fazer o download dos arquivos (substituaTEMP_DOWNLOADS_DIR_PATH
). Se a sinalização não estiver definida, os arquivos serão transferidos por download para a pastatmp_downloads
no diretório atual.--disable_deletes
é uma flag opcional que mantém os arquivos transferidos por download. Por padrão, a ferramenta limpa todos os arquivos transferidos por download.
Para mais informações, consulte o README (em inglês).
Verificar manualmente as assinaturas dos pacotes transferidos por download
Só é possível verificar a assinatura do artefato para os binários criados com segurança pelo Assured OSS, e não os fornecidos pelo OSS Assured por proxies.
Você pode usar várias ferramentas para verificar assinaturas manualmente. As etapas a seguir usam CLI gcloud, o OpenSSL (versão 3.0.1 ou posterior) e o jq (1.7.1 ou superior) para verificar as assinaturas no Linux.
Faça o download do arquivo de metadados. Conforme descrito em Acessar metadados usando o Cloud Storage, o arquivo de metadados contém um campo
SBOM
dentro do campobuildInfo
. O SBOM contém o artefato (por exemplo, um arquivo JAR ou EGG) que foi criado com uma anotação que representa a assinatura. Esse artefato permite determinar o ID do SPDX.Por exemplo, se o nome do artefato for
artifact_name
,spdx_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 do 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 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' | openssl x509 -pubkey -noout > pubKey.pem
Verifique a assinatura do resumo usando o certificado:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se for bem-sucedido, esse comando retornará
Signature Verified Successfully
. Agora você pode verificar o certificado.Extraia a cadeia de certificados públicos 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.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Faça o download do certificado raiz (
ca.crt
no seguinte comando):curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifique o certificado usando a cadeia de certificados e o certificado raiz:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Se for bem-sucedido, esse comando retornará
pubKey.pem: OK
.
Verificar as assinaturas para campos de metadados de segurança
É possível verificar de forma independente a assinatura dos seguintes campos no arquivo de metadados de segurança:
buildInfo
vexInfo
healthInfo
(se presente)
Os dados dentro dos campos são criptografados com hash usando SHA-256 e, em seguida, o hash é assinado usando o algoritmo ECDSAP256_DER. O certificado e a cadeia de certificados são fornecidos dentro dos metadados para que você possa verificar a assinatura. Use o certificado raiz abaixo 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 Assured OSS Verifier.
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
.
É possível verificar assinaturas usando várias ferramentas. O exemplo a seguir usa a CLI gcloud, o OpenSSL (versão 3.0.1 ou posterior) e o jq (1.7.1 ou posterior) 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, 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 o 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 o certificado:
openssl pkeyutl -in digest.bin -inkey pubKey.pem -pubin -verify -sigfile sig.sig
Se a verificação for bem-sucedida, esse comando 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' | openssl x509 -pubkey -noout > pubKey.pem
Extraia a cadeia de certificados públicos para um arquivo
.pem
:cat metadata.json | jq -rj '.buildInfoSignature.certInfo.certChain' | openssl x509 -pubkey -noout > pubKeyChain.pem
Faça o download do certificado raiz, chamado
ca.crt
, no seguinte comando:curl -o ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
Verifique o certificado usando a cadeia de certificados e o certificado raiz:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Se for bem-sucedido, o comando retornará
pubKey.pem: OK
.