Esta página descreve como acessar metadados de segurança do bucket assuredoss-metadata
do Cloud Storage. Para uma descrição dos riscos
metadados, 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 os dois usando as seguintes informações:
- Idioma:
java
,python
oujavascript
. O valor precisa estar em letras minúsculas. - Package_ID: para Java, é
groupId:artifactId
, por O Python é apackageName
e, para JavaScript, é uma das@org-name/package-name
,@username/package-name
, oupackage-name
. O valor precisa estar em 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 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
Exemplo de URL de 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 transferidos por download
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 o ferramenta aoss-verifier.
Exportar
$(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 sinalização opcional que ignora a correspondência do certificado de folha para o certificado raiz por meio da cadeia de certificados, se usados.--temp_downloads_path
é uma sinalização opcional para definir o caminho em que você quer faça o download dos arquivos (substituaTEMP_DOWNLOADS_DIR_PATH
). Se a flag não estiver definida, será feito o download dos arquivos para a pastatmp_downloads
na diretório atual.--disable_deletes
é uma sinalização opcional que mantém os arquivos transferidos por download. De por padrão, a ferramenta limpa todos os arquivos baixados.
Para mais informações, consulte o arquivo README.
Verificar manualmente as assinaturas dos pacotes transferidos por download
Só é possível verificar a assinatura do artefato para os binários que são seguros criados pelo Assured OSS, não aqueles fornecidos pelo Assured OSS por proxies.
Você pode usar várias ferramentas para verificar assinaturas manualmente. 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.
Faça o download do arquivo de metadados. Conforme descrito em Metadados de segurança campos, 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. Com esse artefato, você determina 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 denominadogradio-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 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 é possível 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 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 houver)
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
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 CLI gcloud, OpenSSL (versão 3.0.1 ou mais recente) e 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
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 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
.