.. _releaseProcessGovWay_thirdPartyDynamicAnalysis_sbom:
Generazione SBOM (Software Bill of Materials)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oltre alla verifica delle vulnerabilità, il processo di build produce un **SBOM** (Software Bill of Materials): un inventario formale e machine-readable di tutte le dipendenze del progetto, con i relativi identificativi univoci (PURL), hash crittografici, licenze e relazioni di dipendenza transitive.
**Formati prodotti**
Il progetto genera l'SBOM in due formati standard:
- `CycloneDX `_: standard OWASP, ottimizzato per security e vulnerability tracking;
- `SPDX `_: standard Linux Foundation (ISO/IEC 5962:2021), ottimizzato per compliance legale e licenze.
Entrambi i formati vengono generati ad ogni build in formati diversi (JSON, XML, RDF) tramite i plugin Maven `cyclonedx-maven-plugin `_ e `spdx-maven-plugin `_.
**Utilizzo**
La generazione dell'SBOM è integrata nel ciclo di build Maven e si attiva automaticamente nella fase ``package``:
::
mvn package
In alternativa è possibile attivarla esplicitamente nella fase ``verify``, saltando compilazione e packaging:
::
mvn verify -Dsbom=verify -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none
**Configurazione**
La generazione è controllata tramite le seguenti proprietà Maven nel `root pom.xml `_:
- ``sbom``: fase master (default: ``package``, usare ``none`` per disabilitare tutti i formati);
- ``sbom.output.dir``: directory di output (default: ``${project.basedir}/sbom``);
- ``sbom.includeTestScope``: include le dipendenze con scope test (default: ``false``);
- ``sbom.cyclonedx``: fase per CycloneDX (eredita da ``sbom``, ``none`` per disabilitare solo CycloneDX);
- ``sbom.cyclonedx.format``: formato CycloneDX (``json``, ``xml``, ``all``, default: ``all``);
- ``sbom.spdx``: fase per SPDX (eredita da ``sbom``, ``none`` per disabilitare solo SPDX);
- ``sbom.spdx.json``: attivazione formato JSON SPDX (eredita da ``sbom.spdx``);
- ``sbom.spdx.rdfxml``: attivazione formato RDF/XML SPDX (eredita da ``sbom.spdx``).
**Artefatti prodotti**
Al termine del build, nella directory ``sbom/`` sono disponibili:
::
sbom/
├── cyclonedx/
│ ├── bom.cdx.json (CycloneDX 1.6 - formato JSON)
│ └── bom.cdx.xml (CycloneDX 1.6 - formato XML)
└── spdx/
├── bom.spdx.json (SPDX 2.3 - formato JSON)
└── bom.spdx.rdf.xml (SPDX 2.3 - formato RDF/XML)
**Esempio di comandi**
Per generare l'SBOM senza eseguire compilazione, testsuite, packaging e verifiche:
::
mvn verify -Dsbom=verify -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none
Per generare solo CycloneDX:
::
mvn verify -Dsbom=verify -Dsbom.spdx=none -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none
Per generare solo SPDX:
::
mvn verify -Dsbom=verify -Dsbom.cyclonedx=none -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none
Per disabilitare del tutto la generazione SBOM durante un ``mvn package``:
::
mvn package -Dsbom=none
Per includere anche le dipendenze di test nell'SBOM:
::
mvn package -Dsbom.includeTestScope=true