共计 4133 个字符,预计需要花费 11 分钟才能阅读完成。
01 前言
计算机科学史上涌了 C/C++、Java、JavaScript、Ruby、Python、Perl 等多种编程语言。每一种语言都有其善于的畛域,其中 Java 语言凭借其面向对象、主动内存治理、多线程性能优越等劣势继续处于浪潮之巅。目前市场上存在着大量品质不错 OpenJDK 的衍生版本可供用户抉择。它们或者性能卓越,或者针对某些场景做出了优化。但 JDK 作为根底软件,归根结底软件的可信赖和可用性是最咱们最根底的谋求。
02 Alibaba Dragonwell
Alibaba Dragonwell,一款收费的、生产就绪型的 OpenJDK 发行版。阿里巴巴提供长期反对,包含性能加强和平安修复。不同于以往的 OpenJDK。Alibaba Dragonwell 有其特有的五大劣势:
2.1 平安与稳固
Alibaba Dragonwell 与 OpenJDK 社区放弃严密单干,始终保持对社区工作的跟踪,及时同步上游更新,以保障 Java 利用的平安和稳固。
2.2 性能与效率
Alibaba Dragonwell 的前身是阿里巴巴外部应用的 AJDK。AJDK 作为阿里巴巴 Java 利用的基石,撑持了阿里简直所有的 Java 业务,积攒了大量业务场景下验证过的新技术,这些新技术极大得进步了阿里巴巴 Java 业务的性能和故障排查效率。AJDK 翻新技术,会逐渐奉献到 Dragonwell 积淀。
2.3 Java SE 规范兼容
Alibaba Dragonwell Standard Edition 齐全遵循 Java SE 规范。
2.4 特色性能
Alibaba Dragonwell Extended Edition 还具备诸多特色性能,例如 JWarmup、ElasticHeap 等等。这些个性在阿里巴巴外部失去了广泛应用,解决了很多生产实践中的痛点,为阿里巴巴 Java 业务的稳固运行立下了汗马功劳,能够说是 Alibaba Dragonwell 的独门武器。
2.5 新技术的疾速采纳
基于阿里工程实际,Alibaba Dragonwell 会抉择移植高版本 Java 的重要性能,这些移植性能曾经在阿里外部被大规模部署,用户都能够收费应用,而不必等 OpenJDK 下一个 LTS 版。
随着 Alibaba Dragonwell 的迭代,越来越多的新个性将会被开源。随着应用 Alibaba Dragonwell 的 Java 利用日益增多,在源码和构建工程均开源的状况下,咱们如何保障用户所应用的 Alibaba Dragonwell 的确是出自阿里云编译器团队?如何保障咱们的 JDK 在公布构建过程中没有被篡改呢?
03 咱们为什么要做供应链平安
软件供应链是在整个软件开发生命周期 (SDLC) 中波及应用程序,或是任何形式在其余开发中发挥作用的任何事和物。而 JDK 在 Java 软件的供应链中毫无疑问占据了外围位置。JDK 是 Java 软件开发的根底,它提供了软件运行环境、调试和编译的工具以及丰盛的 API。如此外围的工件,如果不能保障他的起源牢靠,一旦受到歹意者的篡改并加以流传,重大的结果可想而知,因而供应链平安势在必行!
说起软件供应链平安,首先想到的便是当下较为炽热的软件供应链平安规范 SLSA。SLSA 是一个规范和管制清单的平安框架,用于避免篡改、进步完整性以及爱护我的项目、业务或企业中的包和基础设施。借此软件生产商使其软件更平安,消费者能够依据软件包的平安情况做出抉择。其旨在为开发人员和企业提供行业标准、公认且约定的爱护和合规级别,任何人都能够采纳和应用。用户能够以此来要求所依赖的软件是特定的 SLSA 级别,企业也能够此作为领导准则来增强外部供应链。
咱们之所以抉择参考 SLSA 来领导咱们增强供应链,次要因为它有两点重要的准则:
软件供应链中任何软件工件只有在被“受信赖的人”的明确审查和批准之后能力进行批改。
软件工件能够追溯到原始的起源和依赖项。
04 咱们是如何做的
最好的合作伙伴之一 Eclipse Adoptium
阿里云于 2020 年退出 Eclipse Adoptium 社区,是 Eclipse Adoptium 工作组的策略基石成员,参加 Eclipse Adoptium 社区治理,为 Java Ecosystem 提供齐全兼容的、基于 OpenJDK 的高质量 JDK 发行版。Alibaba Dragonwell 现有的公布工程大部分都基于 Adoptium 进行了适配和小幅度的开发。当然,咱们和社区始终都放弃着严密的单干,对于较为通用的优化和 Bug 修复咱们也都奉献给了社区。
晋升 SLSA 的实际
Alibaba Dragonwell 曾经达到了 SLSA v0.1 specification 所形容的 2 级要求。近年来,咱们致力于参加 Adoptium 社区的建设,基于 Adoptium 社区开源的设施,咱们进行了一定量的改变和适配,最终得以实现 Alibaba Dragonwell 的安全等级晋升。公布流程详情如下图所示。
SLSA 1 级
等级 1 意味着咱们的构建必须齐全脚本化 / 自动化并生成出处。咱们在公布版本中主动生成二进制文件、SBOM(软件资料清单)文件和校验文件。以下是等级 1 的达成条件:
- 构建 – 脚本化的构建
所有构建步骤必须被定义在相似于“build script”的中央。如果有须要手动执行的中央,那只能是调用构建脚本。咱们把 pipeline 流程都残缺的定义在了 ci-jenkins-pipelins,上游的构建工程被定义在了 openjdk-build。咱们公布期间须要做的只有填写对应的参数和触发工程,而后所有所需的文件都会生成。
- 出处 – 可用
软件出处需以消费者承受的格局提供给消费者,且格局应该是合乎 SLSA 规定的。但如果有另一种格局,生产者和消费者都批准并且认为它能满足所有其余要求,刚才能应用。
咱们公布构建会以 OWASP CycloneDX 格局生成 SBOM 文件,该文件蕴含了全副的构建信息,包含环境、组件信息、构建指令和参数等。
SLSA 2 级
等级 2 须要咱们进行版本治理,以及创立生成通过身份验证的出处的托管构建服务。咱们通过 Github 治理咱们的源码和版本标签,公布期间在 jenkins 实例上主动对公布产物进行了签名。以下是等级 2 的达成条件:
- 源码 – 版本治理
这要求源码的每笔批改都应在版本控制系统中进行跟踪,包含记录更改历史记录以及无限期援用此特定的、不可变的提交的办法。
咱们在 Github 治理源码,例如 Dragonwell 8。源码中的每一笔提交都必须满足如下的提交格局,否则会被 CI 测试拦挡。提交的代码会通过认真的审查和具体的 CI 测试,通过审查和验证之后,每笔提交都会被记录在历史记录中。通过历史记录咱们能获取到对应的 Issue 和 Pull Request 地址。每次公布的时候,咱们都会对公布版本创立标签,标签会蕴含版本号和 dragonwell 版本 (extended/standard)。
[<tag>] <One-line description of the patch>
Summary: <detailed description of the change>
Test Plan: <how this patch has been tested>
Reviewed-by: <Github IDs of reviewers>
Issue: <full URL or #github_tag>
- 构建 – 构建服务
所有的构建都应该以服务的模式,而不是在私人的工作目录下进行。咱们在咱们的 Jenkins dragonwell-jenkins 上构建相干文件。所有的文件都会通过 Jenkins 工程上传 Github、阿里云 OSS,并且会主动生成相应的容器镜像,公布在阿里云 ACR 仓库和 DockerHub 仓库。另外,standard 版本还将会公布在 Adoptium Marketplace。
- 出处 – 身份认证
消费者能够验证出处的真实性和完整性。这应该通过来自私钥的数字签名来进行,只能由生成出处的服务拜访。GPG 密钥存储在阿里巴巴编译器团队的 jenkins 实例上,公布时咱们会应用该密钥进行签名,用户也可通过咱们的验证工程 validate-signature,验证签名是否属于咱们团队。
- 出处 – 服务生成
咱们的参数都在工程构建前进行了设置,匿名用户无执行权限,因此咱们的构建不会被注入或者更改不平安的内容。
咱们的 SBOM 文件和验证文件由构建主动生成,GPG 的密钥存储在 jenkins 实例上,该密钥不对外公开。因而,咱们的构建服务是平安可控的。
05 将来瞻望
咱们这就完结了吗?很显然这并不是,当初只是 Alibaba Dragonwell 迈向更高级别 SLSA 的开始。在过来的几年,咱们跟 Adoptium 社区有十分严密的单干。将来咱们也将会携手 Adoptium 社区持续致力,晋升 Alibaba Dragonwell 的产品质量和合规等级。
相干链接:
1.SLSA v0.1 specification:http://slsa.dev/spec/v0.1/levels
2.ci-jenkins-pipelins:https://github.com/dragonwell-releng/ci-jenkins-pipelines
3.openjdk-build:https://github.com/dragonwell-releng/openjdk-build
4.OWASP CycloneDX 格局:https://owasp.org/www-project-cyclonedx
5.dragonwell 8:https://github.com/alibaba/dragonwell8
6.dragonwell-jenkins:http://ci.dragonwell-jdk.io/
7.DockerHub 仓库:https://hub.docker.com/r/alibabadragonwell/dragonwell/tags
8.Adoptium Marketplace:https://adoptium.net/marketplace/
9.validate-signature:http://ci.dragonwell-jdk.io/job/build-scripts/job/release/job…
原文链接
本文为阿里云原创内容,未经容许不得转载。