我正在尝试生成一个 SBOM,其中包含 Spring Boot 的所有默认依赖项。我尝试使用生成的 Maven pom 并删除
<*Management>
标签将所有内容声明为依赖项,然后运行 mvn install
并生成 SBOM,但它不包含所有默认依赖项。
我也尝试过从 Spring Boot 的源生成,但所有依赖项也不包含在那里。基于根项目生成比较好,但也不包含所有依赖项。
以下内容复制自Spring Boot内部CI步骤
./gradlew -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false \
--no-daemon --no-parallel --continue build
我正在尝试使用 cyclonedx 生成 SBOM。我尝试使用
makeAggregateBom
(默认)、makeBom
和 makePackageBom
我的最终目标是找到覆盖 Spring 默认依赖项的项目。例如,对于 Spring Boot 3.2.3,您应该有
logback-classic:1.4.14
,(此页面未在我能找到的任何地方作为 json 文件发布)。如果您的项目中有不同的版本,那么您通过覆盖默认版本来执行一些次优的操作。
阅读 Thomas Vitale 的“供应链安全:Java 应用程序的 SBOM”,您可以在构建过程中自动生成 SBOM,方法是在项目的 pom.xml
文件中包含 CycloneDX Maven 插件
:它将生成一个 SBOM,然后您可以对其进行分析以识别任何依赖项版本覆盖。
<build>
<plugins>
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
<version>2.8.0</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>makeAggregateBom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用 mvn clean verify
生成 SBOM。生成 SBOM 后,您现在可以对其进行分析,以识别版本与 Spring Boot 推荐的版本不匹配的任何依赖项。该手动步骤涉及将 SBOM 中列出的版本与
Spring Boot 文档 或特定 Spring Boot 版本的 spring-boot-dependencies
POM 中指定的默认版本进行比较。要自动执行识别覆盖的过程,您可以考虑编写一个解决方案脚本来解析生成的 SBOM 并将每个依赖项版本与推荐版本进行比较。这可以使用您选择的语言的 XML 或 JSON 解析工具来完成,具体取决于您的 SBOM 的格式。