ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何使用Maven和Gradle在Java中创建SBOM

2022-11-04 16:38:14  阅读:317  来源: 互联网

标签:java 函数 学习


在Java中构建应用程序时,我们高度依赖外部库和框架。导入的每个 Java 包可能还依赖于更多的库。这意味着应用程序中包含的 Java 包的数量通常不是真正透明的。作为开发人员,这些嵌套(传递)依赖项会产生一个问题,即您可能不知道实际使用的所有库。

最近,我们讨论了为什么以及如何仔细维护我们的依赖项。在管理 Java 依赖项的最佳实践一文中,我讨论了可用于设置依赖项管理策略的选项和工具。但是,如果您将 Java 应用程序交付给客户,该怎么办?他们如何知道包含哪些依赖项?更重要的是,他们如何检查依赖项是否容易受到安全问题的影响?答案是软件物料清单

什么是 SBOM?

软件物料清单(通常缩写为 SBOM)是应用程序中使用的所有软件组件的列表。SBOM 由第三方开源库、供应商提供的包和组织构建的第一方项目组成。您基本上可以将其视为应用程序的完整成分列表。

但请注意不要将 SBOM 与 Maven 的物料清单 (BOM) 混淆。在Maven中,BOM是一种特殊的POM文件,我们可以在其中集中应用程序的依赖项。在大多数情况下,这些依赖项可以很好地协同工作,应该作为一个集合使用,就像我们在 Spring 中使用的 BOM 中看到的那样。

SBOM 是您在应用程序旁边创建的内容,因此任何用户或客户端都可以统一地了解应用程序在后台使用的内容。

为什么要创建 SBOM?

创建 SBOM 的原因有多种。首先,您可以创建有关应用程序如何包含内容的透明度。在大多数 Java 应用程序中,生成的二进制文件的 80% 到 90% 由其他 Java 包(如库和框架)组成。

如今,我们在供应链中看到了很多安全问题。您使用的依赖项是供应链的一部分,因此如果在其中一个库中发现问题,您需要知道应用程序是否容易受到攻击。以最近的Log4Shell和Spring4Shell漏洞为例,其中某些常用软件包遭到破坏。当 SBOM 作为每个版本的一部分提供时,最终用户和客户端可以轻松检查漏洞是否影响他们。

在交付软件时,SBOM 的创建应该是常见的做法,有时甚至是强制性的。因此,我们认为介绍如何为您的 Java 项目创建这些 SBOM 非常重要,我们将在本文的其余部分介绍这些内容。

SBOM 标准:SPDX 和 CycloneDX

目前,SBOM 有多个标准。最常用的两种是SPDX和CycloneDX。这两个标准都提供了一种显示应用程序包含的组件的方法。

软件包数据交换 (SPDX) 是 Linux 基金会的一个协作项目,它为通信软件物料清单信息(包括来源、许可、安全性和其他相关信息)提供了一个开放标准。SPDX 规范被公认为安全性、许可证合规性和其他软件供应链工件的国际开放标准,如 ISO/IEC 5962:2021。

CycloneDX是OWASP基金会的SBOM标准,专为应用程序安全上下文和供应链组件分析而设计,提供所有第一方和第三方软件组件的清单。该规范内容丰富,从软件库扩展到软件即服务物料清单 (SaaSBOM)、漏洞利用交换 (VEX) 等标准。CycloneDX项目提供了XML,JSON和Protocol Buffers的标准,以及大量官方和社区支持的工具,这些工具可以创建或与标准互操作。

何时在 Java 中创建 SBOM

Java 是一种编译语言,因此每当构建应用程序的发布版本时,都应创建 SBOM。因此,在使用其中一个 Java 构建系统时创建 SBOM 非常有意义,因为构建系统会下载编译和构建应用程序所需的所有包。通过使用 Maven 或 Gradle 的插件,您可以在单台计算机上或作为 CI 管道的一部分轻松创建二进制文件的每个版本

Creating a Java SBOM with Maven

Maven的CycloneDX插件

Maven central和Github上有一个CylconeDX插件,它似乎维护良好且常用。

<plugins>
   <plugin>
       <groupId>org.cyclonedx</groupId>
       <artifactId>cyclonedx-maven-plugin</artifactId>
       <version>2.7.1</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>CycloneDX-Sbom</outputName>
       </configuration>
   </plugin>
</plugins>

您可以通过不同的方式配置CycloneDX插件。在这种情况下,我将插件的目标绑定到 Maven 的打包阶段。创建我的 JAR 后,插件将创建一个 SBOM,同时考虑聚合。它排除了测试依赖项,并在我的目标文件夹中以 XML 和 JSON 格式发布 SBOM。

标签:java,函数,学习
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有