Blog chevron_right 未分类

防止企业 Java 面临 Java 许可责任风险

Protect Your Business Java Against Java Licensing Liability Risks

您已从环境中删除了需要昂贵的 Oracle Java SE 通用许可证(与 Oracle 主协议 (OMA) 相关)的所有 Oracle JDK。但现在,您需要防止 Oracle Java“偷偷返回”并触发对 Oracle 的新许可责任。本文将介绍如何禁用 JavaUpdater,探讨其他常见的最新防范方法、其有效性和缺点,并为您在考虑 Java 许可问题时提供几种额外机制。

背景

2023 年 1 月,Oracle 将 Java 的许可要求更改为“所有员工指标”。各公司应该仔细查看实际协议中的具体细节,但在本文中,我们将该协议解释为:如果您安装了一个或多个 Oracle Java SE 实例,则无论安装位置如何,每个实例都要遵守 Oracle 技术网络 (OTN) 许可的要求。您的组织可能需要遵守“所有员工”许可要求,不论实际使用 Java的员工人数为何,甚至不论拥有或使用计算机的员工人数为何。有鉴于此,您的组织可能面临重大财务风险,需要持续保持警惕。

Oracle Java 如何返回到您的环境中?

Oracle Java 有多种方法可以悄悄安装或更新。其中一些方法仅适用于台式机,有些则适用于服务器。请同时考虑这两种环境,因为两者都遵循相同的 Oracle 许可要求。Oracle Java 有多种方法可以安装或更新。

  • 用户直接从 download.java.com 或 oracle.com/downloads 下载。
  • 用户从外部维护的镜像网站下载。
  • 通过 JavaUpdater 后台进程(在 Windows 桌面上)与 Oracle Java 开发工具包 (JDK) 或 Java 运行时环境 (JRE) 一起安装。
  • 通过 Java 控制面板小程序一键更新现有 JVM(Java 虚拟机)/JDK。
  • 迁移前创建的黄金映像或其他基础虚拟桌面基础架构 (VDI)/映像。
  • 迁移 Java 之前创建的备份/恢复映像。
  • 操作系统便捷通知:如果系统上未安装 Java,并且用户在命令提示符中输入“Java”,他们将收到一条将其指向 java.com 的消息。
  • 许多需要 Java 的旧版应用程序可能会提示用户下载 Oracle Java,较新的应用程序通常需要 OpenJDK,但并非所有情况都是如此。
  • JavaScript 有多种功能可以让开发者轻而易举地提供直接下载资源或重定向到 Oracle Java 网站的可单击按钮。

以下是针对上述要点需要考虑的一些注意事项:

仅仅阻止 java.com oracle.com/java/download 是不够的

Java 已经面世近 30 年了。在这段时间里,它经历了多次迭代,包括从免费到付费的转变,具体取决于提供商。由于 Java 十分常用并且 Oracle Java 在许多用例中可以免费使用,Oracle Java 可通过许多 Web 渠道、分销合作伙伴和学术机构获取,其中许多渠道并没有费心去维护或删除可公开获取的 JDK 和 JRE 的完整功能副本。从许可的角度来看,这些旧的二进制文件通常并不造成麻烦(安全性是另一回事),但附带的 Java 更新程序和 Java 控制面板小程序使用户很容易无意中将其安装版本更新到需要 Oracle 许可证的版本。

Azul 为现代云企业提供 Java 平台。数百万 Java 开发人员、数亿设备以及世界上最受认可的企业都信赖 Azul,并相信 Azul 能为他们的应用程序提供卓越的功能、性能、安全性、价值和成功。

我们将讨论适用于仍在部署中的最常见版本 (Java 6-21) 的策略,但您应该注意,某些特定版本的 Oracle Java 需要遵守许可要求。这些特定版本是 8u211+、11、12、13、14、15、16。此外,Oracle 还考虑使用“商业功能”作为其许可要求的另一个触发因素,例如使用 MSI (Microsoft Windows Installer) 或使用 JFR (Java Flight Recorder)。

注: 2024 9 月开始,Oracle Java 17 也需要付费 OTN 许可才能用于商业用途。

务必:

  • 阻止下载部分(并且在可行的情况下,阻止特定版本)。

请勿:

  • 阻止整个域。Java.com 上拥有丰富的信息、文档和讨论,对任何参与 Java 社区的人都有帮助。

禁用 Java 更新

Oracle Java 包含一个后台(TSR,即终止并驻留)进程,默认情况下启用该进程来检查 Java 的新版本。

Java licensing - Disabling Java update

您可以禁用这些进程,这不会影响已安装的 Java 的当前工作状态。Azul 建议在注册表级别删除或至少禁用这些进程,并禁止用户使用或重新启用它们。一些旧版本的 Oracle JVM/JRE/JDK 允许卸载更新程序,较新的版本没有分离此组件。请注意,虽然修改或删除 JDK 的任何部分都违反 Oracle 条款,但是,限制对任何文件的访问并不构成违规。

禁用 Java 控制面板小程序

Oracle Java JRE 附带的控制面板小程序(Windows 上为 javacpl.exe)提供一个图形界面来控制 Oracle JVM 的许多方面。我在这里要提醒您注意 WebStart(尽管它没有从 Oracle JVM 中分离),因为控制面板小程序与 WebStart 有着密切的联系,并且开放社区单独实现了其等效功能(在 IcedTea-Web 开源项目中)。控制面板小程序包含一个选项卡,用户使用该选项卡能通过多种方式更新其 Java:

Java licensing - Disabling Java Control Panel Applet

通过设置自动化或单击“立即更新”按钮,用户可以开始下载其 JRE/JDK 的最新版本。

务必:

  • 完全禁用此功能,此界面中不会保留任何自助式用户级功能(删除对 javacpl.exe 的访问权限)。
  • 了解此界面使用的底层属性文件,并在管理员级别修改/更新这些文件。
  • 在 Windows 上,您可以禁用 HLM:\SOFTWARE\JavaSoft\Java Update\Policy 中的两个注册表项“EnableJavaUpdate”和“EnableJavaUpdateCheck”(DWORD)。
  • 高级用户应该学习有关 IcedTeaWeb-settings 界面的知识,该界面可取代此功能的大部分内容。

请勿:

  • 删除 javacpl.exe,这将违反 Oracle 条款。

更新黄金映像或其他基础 VDI/映像

从快速现场测试和敏捷开发,到生产级机器的标准化,许多企业使用黄金映像来实例化各种用例的虚拟机。这些映像通常包括通用或公司授权的软件,并且可能包括用于服务器的 JRE 或用于开发映像的 JDK。这些映像在实例化之前保持离线状态,同时其磁盘处于存档状态,因此它们可以处于休眠状态,不会被正常的扫描/观测机制检测到。如果它们仍然存在于您的环境中,并且您在生产场景中实例化和使用它们,则这确实会带来风险。

务必:

  • 访问您的 VDI/映像存储库,确定 Java 是否包含在标准构建版本或映像中。如果发现 Java,请使用适当的二进制文件重建映像。
  • 如果您有在映像启动前分类的功能,请确保使用已更新的 JVM。

请勿:

  • 将替换的责任转移到映像用户身上。
  • 允许临时使用 Oracle JVM。
  • 认为短暂存在的映像不会长期存在。

刷新备份、恢复映像和快照

随着时间的推移,备份等用于恢复的内容将不再成为问题,他们会自然消失。但在迁移后的一段时间内,应特别注意跟踪调用任何这些恢复机制的系统。您应小心备份本身。值得注意的是,Oracle 在某些情况下称备份文件仍然随时可用且易于启用,因此这存在违反许可证的风险。从备份中恢复的系统将受到您现有的软件执行策略的约束,因此请确保尽快获取并修复这些备份。修复后,应创建新的备份/快照,并且在可以的情况下,应离线迁移以前的备份并使其“不可立即使用”。

务必:

  • 制作/更新不包含 Oracle Java 的快照。
  • 确保执行策略解决多余 Oracle Java 二进制文件的执行问题。

请勿:

  • 忽略备份存档,如果这些存档能被使用,就会被使用。
  • 认为最终用户会发现这种情况并进行补救。
  • 允许更旧版本的(非 OTN)Java 在未经检查的情况下运行,至少检查 Java 更新程序和 Java 控制面板设置。

禁用操作系统和便捷更新

如果用户在命令提示符处输入“java”,或者应用程序在未启用的(不含任何 Java 的)MacOS 系统上请求 Java,操作系统会向您发出响应,让您访问 java.com:

Java licensing - If a user types “java” at a command prompt or an application requests Java on an uninitiated (free of any Java) MacOS system, you will get a response from the OS telling you to visit java.com.
Java licensing - If a user types “java” at a command prompt or an application requests Java on an uninitiated (free of any Java) MacOS system, you will get a response from the OS telling you to visit java.com.

务必:

  • 告诉您的用户应该使用哪些 Java 版本(基于公司标准或指南)。
  • 通过自助式服务选项使 Java 即刻可用。由于存在许多选项和特定于应用程序的要求,您无法期望应用程序和用户坚持使用特定版本。虽然在主要 Java 版本中可以放心允许一定的灵活性,但我们建议用户尽可能选择(主要版本的)最新补丁版本。
  • 考虑使用受支持的 OpenJDK,其中包括及时的安全性更新和补丁更新。
  • 通过 https://www.azul.com/downloads 中的 dmg/rpm/msi 安装 Java 运行时。
  • 通过自制软件安装/构建 Java
    • 通过自制软件安装 OpenJDK@<java version number>

请勿:

  • 访问 java.com 并安装其中提到的任何版本。

应对与应用程序打包在一起的 Java

这种情况下您需要小心,并且可能需要与软件供应商沟通。有些应用程序以合法方式将 Java JRE 或 JDK 添加为其安装的一部分,例如使用 Java Compact Profile 的低功耗/物联网设备、网络受限环境中使用的虚拟机映像等。在这些情况下,重要的是正确理解应用程序的支持要求和许可责任。

在大多数情况下,当今的供应商将支持其应用程序在经过 TCK(技术兼容性套件)认证的 OpenJDK 版本上运行。如果供应商确实能证明其软件与 OpenJDK 兼容,那么您选择想要的任何 OpenJDK 发行版均可。供应商可能会使用特定的发行版进行证明,但这可能是出于自身便利或是因为他们理解不充分。供应商应该考虑使其测试针对 OpenJDK 规范,这样您选择任何经过认证的 OpenJDK 均可。如果供应商使用特定发行版的类,他们应该专门记录要求。

在极少数情况下,供应商认为使用除规定的 Oracle JRE 之外的任何 JRE 都会使其支持合同失效。此时,您应该要求获取上述要求的书面文档,并要求文档附上一份声明,表明在您的环境中为此目的使用 Oracle Java 不会使您的组织受到 Oracle 所有员工许可模型的约束。

务必:

  • 调查符合这种情况的每个应用程序。可以从访问供应商的网站或联系他们的支持部门来着手。
  • 要求获取有关将应用程序迁移到 OpenJDK 的说明。不要担心迁移过程会遇到太多麻烦,尤其是对于较新版本的 Java。

请勿:

  • 忽略这种情况。如果没有明确声明免除您对 Oracle 的任何许可责任,则将 Oracle JDK 与第三方应用程序一起使用会使您面临许可风险。

降低因使用 JavaScript 或因从外部站点启用造成的风险

只需一行简单的脚本即可创建 HTML 按钮,用户只需单击一下即可下载 Oracle JDK,并带来新的许可证责任。虽然这些情况通常超出您的控制范围,但您可以采取一些主动步骤。

务必:

  • 向您的用户介绍可供他们使用、已批准的 Java 版本。
  • 简化相应的下载。

请勿:

  • 允许用户继续使用从 java.com 或 oracle.com 下载的 Java。

一般性建议

预防持续的 Oracle Java 许可风险是可行的,但您现在应该清楚,单独的外围策略并不是最佳方法,您还需要风险降低策略并保持合理的警惕。

  • 监控 Oracle Java 并尽快修复任何新的 Oracle Java 实例。用 OpenJDK 发行版替换 Oracle JDK 并不困难,并且几乎不会带来兼容性、稳定性或安全风险。您的新 Java(非应用程序)供应商也应该能够为此类工作提供指导。
  • 如果您有可用的实时桌面管理解决方案(例如 BeyondTrust、CyberArc 等),请使用这种方案来禁用关键 Java 安装程序、可执行文件和启动程序(java.exejavaw.exejavaws.exejp2launcher.exe 等)。
  • 尽可能使用 Windows 上的组策略。这是控制 Java 是否可以运行或安装的更可靠方法,并且可以通过公司范围的策略集中实施。
  • 使用文件系统扫描工具或清单工具来检查安装注册表之外的内容。Flexera 或 Microsoft Endpoint Configuration Manager(前身为 System Center Configuration Manager (SCCM))等工具可以通过配置定期运行完整文件系统扫描。
  • Azul 可为客户提供 Azul 迁移咨询工具,这是我们的团队在协助迁移工作时使用的一组发现和迁移 (shell) 脚本示例。

结语

由于 Java 的普遍性以及 Oracle Java 许可模型最近的变更,如果您继续让 Oracle Java 在您的环境中运行,则必须了解您的风险和风险暴露情况。

避免代价昂贵的 Java 许可责任需要持续保持警惕和开展分类。上述指南是一种“尽可能全面”的方法,我相信还有其他机制可以将 Oracle Java 重新引入您的环境中。请随意发表评论并补充您认为可能影响他人的任何发现,我们将尽力提供有关如何分类的建议。如果您想了解更多详细信息或有不适合在公共论坛上分享的疑虑,请联系 migration@azul.com,我们会直接回复您。