Esta página descreve como acessar metadados de segurança do bucket assuredoss-metadata
do Cloud Storage. 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 Assured OSS gratuito nível 2.
Antes de começar
Extrair os metadados
É possível usar os comandos gcloud
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 letras minúsculas. - Package_ID: para Java, é
groupId:artifactId
; para Python, épackageName
; e para JavaScript, é um dos valores@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.
URL de exemplo do Python: gs://assuredoss-metadata/python/blessed/1.20.0/metadata.json
Exemplo de URL Java: gs://assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
URL de JavaScript de exemplo: 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 do Java: https://storage.googleapis.com/assuredoss-metadata/java/org.apache.logging.log4j:log4j-core/2.17.1/metadata.json
URL de JavaScript de exemplo: 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 transferidos por download
Verificar as assinaturas dos pacotes transferidos por download 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 o 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 minúsculas.VERSION
: a versão do pacote.
--disable_certificate_verification
é uma flag opcional que pula 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 para onde você quer fazer o download dos arquivos (substituaTEMP_DOWNLOADS_DIR_PATH
). Se a flag não estiver definida, os arquivos serão transferidos 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.
Verificar manualmente as assinaturas dos pacotes transferidos por download
É possível verificar a assinatura do artefato apenas para os binários que são criados com segurança pelo Assured OSS, e não aqueles fornecidos pelo Assured OSS por proxies.
Para verificar assinaturas manualmente, você pode usar várias ferramentas. As etapas a seguir usar CLI gcloud, o OpenSSL (versão 3.0.1 ou mais recente) e jq (1.7.1 ou superior) para verificar as assinaturas no Linux.
Fazer o download dos metadados arquivo. Conforme descrito em Campos de metadados de segurança, o arquivo de metadados contém um campo
SBOM
dentro do campobuildInfo
. SBOM contém o artefato (por exemplo, um arquivo JAR ou EGG) que foi criado junto 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
, 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 seu arquivo de metadados de segurança.SPDX_ID
: o identificador do SPDX.
Calcule o resumo do artefato:
sha256sum ARTIFACT_FILE | cut -d ' ' -f1 > actualDigest.txt
Substitua
ARTIFACT_FILE
pelo nome 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 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 a cadeia e a raiz certificado:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Se for bem-sucedido, esse comando retornará
pubKey.pem: OK
.
Verificar as assinaturas dos campos de metadados de segurança
É possível verificar a assinatura dos seguintes campos nos metadados de segurança arquivo de forma independente:
buildInfo
vexInfo
healthInfo
(se presente)
Os dados nos campos são criptografados com hash usando SHA-256. Em seguida, 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
Você pode verificar assinaturas manualmente ou usando o Ferramenta Assured OSS Verifier.
As etapas a seguir descrevem como verificar manualmente a assinatura do
campo buildInfo
no arquivo metadata.json
. É possível usar etapas semelhantes para
verificar a assinatura do campo vexInfo
ou do campo 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 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
metadata.json
arquivo: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, o comando vai retornar
Signature Verified Successfully
. Agora é possível 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 e a raiz certificado:
openssl verify -verbose -CAfile ca.crt -untrusted pubKeyChain.pem pubKey.pem
Se o comando for bem-sucedido, ele retornará
pubKey.pem: OK
.