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

相关文章
|
3月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
17天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
31 1
|
2月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
3月前
|
Java Docker 微服务
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
88 1
|
3月前
|
存储 安全 搜索推荐
深入探讨Session和Cookie的概念、用途以及如何在Java Web开发中有效地使用它们进行用户状态管理。
在Java Web开发中,Session和Cookie是管理用户状态的核心技术。Session存储于服务器端,通过唯一的Session ID识别用户,确保数据安全与隐私;Cookie则存储于客户端,用于记录用户偏好等信息。两者各有优势:Session适合存储敏感数据,但需合理管理避免资源浪费;Cookie便于持久化存储,但在安全性上需谨慎设置。开发者可通过Servlet API轻松操作二者,实现个性化用户体验与应用性能优化。
59 2
|
3月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
3月前
|
Java
Java 匿名函数的概念和写法
Java 匿名函数的概念和写法
84 1
|
3月前
|
JavaScript 前端开发 Java
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
【8月更文挑战第11天】java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
30 0
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
|
3月前
|
缓存 前端开发 JavaScript
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
【8月更文挑战第11天】一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
36 0
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
|
3月前
|
存储 安全 Java
如何理解java的泛型这个概念
理解java的泛型这个概念