> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Validation des signatures d’image et des attestations

> Vérifiez les signatures Cosign, le SPDX SBOM et les attestations d’analyse des vulnérabilités des images de conteneurs ABBYY Vantage auto-hébergé afin de confirmer l’intégrité de la chaîne d’approvisionnement logicielle.

Ce document explique comment vérifier les signatures cryptographiques et les attestations créées par le pipeline de publication des images vantage-packager.

<div id="overview">
  ## Vue d’ensemble
</div>

Le pipeline de traitement vantage-packager crée plusieurs artefacts de sécurité pour chaque image publiée :

* **Container Image Signature** : signature cryptographique avec Cosign
* **SPDX SBOM Attestation** : nomenclature logicielle au format SPDX 2.3
* **Vulnerability Scan Attestation** : résultats de l’analyse des vulnérabilités au format SARIF
  Tous les artefacts sont signés avec la même clé privée et peuvent être vérifiés à l’aide de la clé publique correspondante.

<div id="prerequisites">
  ## Prérequis
</div>

Vous devez avoir installé les outils suivants :

* `cosign` - pour la vérification des signatures et des attestations
* `jq` - pour l’analyse et le traitement du JSON
* `curl` - pour télécharger des artefacts (facultatif)

<div id="signature-verification">
  ## Vérification des signatures
</div>

<div id="basic-verification">
  ### Vérification de base
</div>

Vérifiez une signature d’image à l’aide de la clé publique :

```bash theme={null}
# Vérifier la signature (ignorer le journal de transparence pour les registres privés)
cosign verify --key cosign.key.pub --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="with-tls-verification-disabled">
  ### Lorsque la vérification TLS est désactivée
</div>

Pour les registres utilisant des certificats auto-signés :

```bash theme={null}
cosign verify --key cosign.key.pub --insecure-ignore-tlog --allow-insecure-registry \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

Résultat attendu :

```json theme={null}
[{
  "critical": {
    "identity": {
      "docker-reference": "abyvtgonprm27.azurecr.io/vantage-installer"
    },
    "image": {
      "docker-manifest-digest": "sha256:a4190ad9d5289d7ad2d02d05749c10713a7aac217e8010b5e4ef15161b181c94"
    },
    "type": "cosign container image signature"
  }
}]
```

<div id="attestation-verification">
  ## Vérification de l’attestation
</div>

<div id="spdx-sbom-attestation">
  ### Attestation SBOM SPDX
</div>

Vérifiez l’attestation de nomenclature logicielle SPDX :

```bash theme={null}
# Vérifier l'attestation SPDX
cosign verify-attestation --key cosign.key.pub --type spdx --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="vulnerability-scan-attestation">
  ### Attestation d’analyse des vulnérabilités
</div>

Vérifiez l’attestation d’analyse des vulnérabilités :

```bash theme={null}
# Vérifier l'attestation d'analyse des vulnérabilités
cosign verify-attestation --key cosign.key.pub --type vuln --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="retrieving-attestation-data">
  ## Récupération des données d’attestation
</div>

<div id="download-spdx-sbom">
  ### Télécharger le SPDX SBOM
</div>

Extrayez le SPDX SBOM à partir de l’attestation :

```bash theme={null}
# Télécharger et extraire le SPDX SBOM
cosign download attestation --predicate-type spdx \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > sbom.json
```

<div id="download-vulnerability-scan">
  ### Télécharger le rapport d’analyse des vulnérabilités
</div>

Extrayez les résultats de l’analyse des vulnérabilités :

```bash theme={null}
# Télécharger et extraire l'analyse des vulnérabilités
cosign download attestation --predicate-type vuln \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > vuln-scan.sarif
```

<div id="analyzing-spdx-sbom-data">
  ## Analyse des données d’un SPDX SBOM
</div>

<div id="basic-sbom-information">
  ### Informations générales sur le SBOM
</div>

```bash theme={null}
# Afficher les métadonnées SBOM
jq '{
  name: .name,
  spdxVersion: .spdxVersion,
  creationInfo: .creationInfo,
  packageCount: (.packages | length)
}' sbom.json
```

<div id="list-all-packages">
  ### Lister tous les packages
</div>

```bash theme={null}
# Lister tous les packages avec leurs versions
jq -r '.packages[] | "\(.name) \(.versionInfo // "unknown")"' sbom.json | sort
```

<div id="find-packages-with-known-vulnerabilities">
  ### Identifier les packages présentant des vulnérabilités connues
</div>

```bash theme={null}
# Lister les packages avec des identifiants CPE (références de vulnérabilités)
jq -r '.packages[] | select(.externalRefs[]?.referenceType == "cpe23Type") |
  "\(.name) \(.versionInfo // "unknown") - \(.externalRefs[0].referenceLocator)"' sbom.json
```

<div id="license-information">
  ### Informations sur la License
</div>

```bash theme={null}
# Afficher les packages avec les licences déclarées
jq -r '.packages[] | select(.licenseDeclared != "NOASSERTION") |
  "\(.name): \(.licenseDeclared)"' sbom.json
```

<div id="analyzing-vulnerability-scan-data">
  ## Analyse des données issues de l’analyse des vulnérabilités
</div>

<div id="basic-scan-information">
  ### Informations de base sur le scan
</div>

```bash theme={null}
# Afficher les métadonnées d'analyse
jq '{
  version: .version,
  tool: .runs[0].tool.driver.name,
  toolVersion: .runs[0].tool.driver.version,
  resultCount: (.runs[0].results | length)
}' vuln-scan.sarif
```

<div id="list-vulnerabilities">
  ### Liste des vulnérabilités
</div>

```bash theme={null}
# Lister toutes les vulnérabilités trouvées
jq -r '.runs[0].results[] |
  "\(.ruleId) - \(.level // "unknown") - \(.message.text)"' vuln-scan.sarif
```

<div id="high-severity-vulnerabilities">
  ### Vulnérabilités à gravité élevée
</div>

```bash theme={null}
# Afficher uniquement les vulnérabilités de haute gravité
jq -r '.runs[0].results[] | select(.level == "error") |
  "\(.ruleId): \(.message.text)"' vuln-scan.sarif
```

<div id="sbom-visualization-tools">
  ## Outils de visualisation de SBOM
</div>

<div id="cli-tools">
  ### Outils en ligne de commande
</div>

<div id="cyclonedx-sbom-utility">
  #### Utilitaire CycloneDX SBOM
</div>

Installez et utilisez l’utilitaire CycloneDX SBOM pour des analyses avancées :

```bash theme={null}
# Installer sbom-utility (si disponible)
go install github.com/CycloneDX/sbom-utility@latest

# Valider le SPDX SBOM
sbom-utility validate --input-file sbom.json

# Générer le rapport de composants
sbom-utility query --input-file sbom.json --select "name,version" --from "packages"
```

<div id="custom-analysis-with-jq">
  #### Analyse personnalisée avec jq
</div>

```bash theme={null}
# Créer une vue de l'arborescence des dépendances
jq -r '.packages[] |
  select(.name != null) |
  "\(.name)@\(.versionInfo // "unknown") (\(.supplier // "unknown"))"' sbom.json |
  sort | uniq
```

<div id="web-based-visualization">
  ### Visualisation sur le Web
</div>

<div id="sbomsh-online-viewer">
  #### Visionneuse en ligne SBOM.sh
</div>

1. Rendez-vous sur [https://sbom.sh/](https://sbom.sh/)
2. Téléversez votre fichier `sbom.json`
3. Explorez la visualisation interactive des composants et des dépendances

<div id="artifact-reference-discovery">
  ## Repérage des références d’artefacts
</div>

<div id="find-signature-artifacts">
  ### Rechercher des artefacts de signature
</div>

```bash theme={null}
# Trouver la référence d'artefact de signature
cosign triangulate --type signature \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="find-attestation-artifacts">
  ### Rechercher des artefacts d’attestation
</div>

```bash theme={null}
# Trouver la référence d'artefact d'attestation
cosign triangulate --type attestation \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```
