SBOM概念和Java生成方式

简介: SBOM概念和Java生成方式

概念

       SBOM(软件物料清单)是一种正式的、结构化的记录。它不仅对软件产品的组件构成进行了详细的说明,同时还描述了这些组件之间的供应链关系。SBOM概述了应用程序中引入的包和库,以及这些包、库与其他上游项目之间的关系。这在重用代码与引入开源代码的时候非常有用。        


合适的SBOM,可以帮助组织对自己所部署的包以及这些包的版本有一个确切的了解,从而便于组织根据自己的需要来进行更新,以维护安全。 

 

SBOM的用途不仅限于安全领域。例如,它还可以帮助开发人员对不同类型软件组件中包含的开源代码许可证进行跟踪。


国家电信和信息管理局(NTIA)列出了任何SBOM都应该包含的七个数据字段: 

供应商名称:创建、定义和标识组件的实体名称。 

组件名称:原供应商为软件组件指定的名称 

组件版本:供应商用于表明先前版本软件做出更改的标识符。 

其他唯一标识符:用于标识组件或用于相关数据库查找的其他标识符。例如,NIST  的CPE字典中的标识符。 

依赖关系:描述软件Y中包含上游组件X的关系。这对于开源项目尤为重要。 

SBOM数据的作者:为该组件创建SBOM数据的实体名称。 

时间戳:记录SBOM数据程序集的日期和时间。


SBOMs 必须满足以下要求:

• SBOM的格式符合SPDX, CycloneDX, 或 SWID tags这三个标准中的其中一个。这样才能确保它能够被机器识别。 

• 每个新的软件版本都必须生成一个新的SBOM,以确保它们是最新的。 

• 除了依赖关系之外,SBOM还必须解释这些关系可能存在在哪些组织所不知道的的地方。


Java生成方式

在Java项目中,可以使用maven插件生成BOM文件。这样在软件编译过程中,就可以自动生成信息。一旦软件发生变动,也可以同步生成新的BOM文件。


CycloneDX格式清单生成

生成CycloneDX规范的BOM 需要用到:cyclonedx-maven-plugin插件在maven的package阶段运行插件,pom配置示例:


<plugin>
  <groupId>org.cyclonedx</groupId>
  <artifactId>cyclonedx-maven-plugin</artifactId>
  <version>2.7.0</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>makeAggregateBom</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <projectType>library</projectType>
    <schemaVersion>1.4</schemaVersion>
    <includeBomSerialNumber>true</includeBomSerialNumber>
    <includeCompileScope>true</includeCompileScope>
    <includeProvidedScope>true</includeProvidedScope>
    <includeRuntimeScope>true</includeRuntimeScope>
    <includeSystemScope>true</includeSystemScope>
    <includeTestScope>false</includeTestScope>
    <includeLicenseText>false</includeLicenseText>
    <outputReactorProjects>true</outputReactorProjects>
    <outputFormat>all</outputFormat>
    <outputName>bom</outputName>
  </configuration>
</plugin>

生成路径和名称:target/bom.jsontarget/bom.xml


参考链接:

https://www.dwcon.cn/post/2094

https://zhuanlan.zhihu.com/p/522621528

相关文章
|
5天前
|
存储 安全 Java
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
11 1
|
5天前
|
监控 Java 调度
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
18 1
|
5天前
|
Java API
Java面试题:说明Lambda表达式在Java中的应用,以及函数式接口的概念和作用。
Java面试题:说明Lambda表达式在Java中的应用,以及函数式接口的概念和作用。
11 0
|
5天前
|
Java API
Java面试题:解释死锁的概念,给出避免死锁的常见策略。你能给我一个具体的例子吗?
Java面试题:解释死锁的概念,给出避免死锁的常见策略。你能给我一个具体的例子吗?
6 0
|
5天前
|
存储 设计模式 Java
Java面试题:解释代理模式的概念,并举例说明其应用场景。
Java面试题:解释代理模式的概念,并举例说明其应用场景。
6 0
|
5天前
|
druid Java 数据库连接
Java面试题:解释数据库连接池的概念及其作用,讨论常见的连接池实现。
Java面试题:解释数据库连接池的概念及其作用,讨论常见的连接池实现。
12 0
|
5天前
|
消息中间件 Java 中间件
Java面试题:解释分布式事务的概念,讨论常见的分布式事务解决方案。
Java面试题:解释分布式事务的概念,讨论常见的分布式事务解决方案。
10 0
|
5天前
|
监控 Java API
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
8 0
|
5天前
|
安全 Java 编译器
Java面试题:解释Java泛型的主要用途,并说明泛型擦除的概念。
Java面试题:解释Java泛型的主要用途,并说明泛型擦除的概念。
7 0
|
5天前
|
并行计算 算法 Java
Java面试题:解释Java中的无锁编程的概念,Java中的Fork/Join框架的作用和使用场景,Java中的CompletableFuture的作用和使用场景
Java面试题:解释Java中的无锁编程的概念,Java中的Fork/Join框架的作用和使用场景,Java中的CompletableFuture的作用和使用场景
5 0