15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
10.10.2024

如何在Firefox中启用Java:运行旧版Java内容的3种方法

Java applet在任何现代网络浏览器中均不再受支持,包括Mozilla Firefox。Mozilla从2017年的Firefox 52开始永久取消了NPAPI插件支持——正是这一架构使Java applet成为可能。如果您今天需要运行旧版基于Java的网络应用程序,您无法简单地在当前Firefox版本中切换某个设置;您必须使用三种专门的变通方法之一,每种方法都有不同的安全性和操作权衡。

本指南以精确的技术细节涵盖了每种可行方法,包括大多数教程所忽略的风险。

为何Java在现代Firefox中不再有效

了解根本原因可以避免浪费排查时间。浏览器中的Java applet依赖于NPAPI(Netscape插件应用程序编程接口),这是一种可追溯至1990年代中期的插件架构。NPAPI赋予插件几乎不受限制地访问主机系统的权限,使其成为远程代码执行漏洞的持续攻击面。

弃用时间线如下:

  • 2015年:Google Chrome完全放弃了NPAPI支持。
  • 2016年:Mozilla开始在Firefox中默认屏蔽NPAPI插件。
  • 2017年3月:Firefox 52成为最后一个支持NPAPI的版本。Firefox ESR 52将该支持延续至2018年中期。
  • 2018年至今:所有Firefox版本均不含任何NPAPI支持。在现代构建版本中,没有任何扩展、标志或about:config调整能够恢复它。

Oracle自身在JDK 9(2017年)中弃用了Java浏览器插件,并在JDK 11中将其完全移除。这意味着即使Firefox仍接受NPAPI插件,该插件本身也不再随现代Java发行版一同提供。

实际含义:任何声称在当前版本中”在Firefox中启用Java”的方法,要么具有误导性,要么涉及在底层运行一个独立的旧版浏览器引擎

三种方法的比较

方法安全风险复杂度费用最适合
旧版Firefox ESR 52高——存在未修补的CVE免费在隔离机器上快速进行一次性访问
IE Tab / 浏览器模拟器中——取决于IE版本低至中免费/付费套餐在受管理的Windows工作站上偶尔访问
搭载旧版浏览器的虚拟机低——完全隔离免费(VirtualBox)频繁或长期使用Java applet

方法一:使用Firefox ESR 52配合NPAPI Java插件

Firefox ESR(扩展支持版本)52是最后一个包含NPAPI支持的分支。将其与匹配的JRE一起安装,可为您提供一个功能性的Java applet环境,尽管这会带来严重的安全风险。

第一步:下载Firefox ESR 52

Mozilla的官方FTP存档托管了每个历史版本。导航至:

https://ftp.mozilla.org/pub/firefox/releases/52.9.0esr/

选择与您的操作系统(win32win64linux-x86_64mac)和语言区域匹配的子目录。直接下载安装程序——避免使用第三方镜像站点,这些站点可能捆绑广告软件或被篡改的二进制文件。

第二步:在隔离配置文件中安装Firefox ESR 52

不要将其安装在当前Firefox之上。在Windows上,使用自定义安装路径,例如C:FirefoxESR52。在Linux上,将压缩包解压到单独的目录:

tar -xjf firefox-52.9.0esr.tar.bz2 -C ~/firefox-esr52/

使用专用配置文件启动,以防止与您的主浏览器数据发生任何交叉污染:

~/firefox-esr52/firefox/firefox --profile ~/.mozilla/firefox-esr52-profile --no-remote

第三步:禁用自动更新

首次启动后,导航至选项 > 常规 > Firefox更新,并选择“检查更新但由您选择是否安装。”更好的做法是,如果此浏览器将持续使用,则在网络层面或通过hosts文件条目屏蔽Firefox的更新服务。

第四步:安装兼容的Java运行时环境

Oracle的JRE 8 Update 161是最后一个在Oracle悄然从后续8u版本中移除NPAPI浏览器插件之前附带该插件的构建版本。从Oracle的存档版本下载JRE 8u161(需要免费的Oracle账户),或从仍打包该插件的可信OpenJDK发行版下载。

安装后验证插件文件是否存在。在Windows上,查找:

C:Program FilesJavajre1.8.0_161binplugin2npjp2.dll

在Linux上:

find /usr/lib/jvm/ -name "libnpjp2.so"

第五步:在Firefox ESR 52中启用Java

  1. 打开Firefox ESR 52,在地址栏中输入about:addons
  2. 点击左侧边栏中的插件
  3. 找到Java(TM) Platform SE(或类似名称)。
  4. 将下拉菜单设置为始终激活

如果插件未出现,说明Firefox找不到插件目录。通过创建或编辑pluginreg.dat文件手动设置插件路径,或在启动前设置MOZ_PLUGIN_PATH环境变量:

export MOZ_PLUGIN_PATH=/usr/lib/jvm/jre1.8.0_161/lib/amd64/
~/firefox-esr52/firefox/firefox --no-remote

重要安全警告

Firefox ESR 52自2018年以来积累了数百个未修补的CVE。切勿将其用作通用浏览器。切勿在其中存储密码、Cookie或会话令牌。将其视为特定内部应用程序的单一用途工具,并尽可能在不暴露于公开互联网的机器上运行。

方法二:使用IE Tab扩展或基于Chromium的IE模拟器

此方法通过在浏览器标签页中嵌入Internet Explorer(Trident)或旧版Edge渲染引擎来实现。由于IE在Windows上通过ActiveX/NPAPI原生支持Java,此方法无需修改您的主Firefox安装即可运行Java applet。

关于浏览器支持的重要说明

IE Tab扩展官方支持Google Chrome和基于Chromium的浏览器(Edge、Brave、Vivaldi)。虽然存在Firefox移植版,但未得到官方维护且功能有限。要使此方法可靠运行,请使用Chrome或Microsoft Edge配合IE Tab扩展。

如果您的工作流以Firefox为中心,此方法需要为Java特定任务并行安装Chrome——对于无法使用完整虚拟机的用户来说,这是一个合理的权衡。

第一步:在Chrome上安装IE Tab

从Chrome网上应用店安装IE Tab。该扩展需要在Windows上安装一个小型原生消息传递主机组件,首次使用时会提示您下载。正是这个组件实际调用了IE引擎。

此方法仅适用于Windows。IE渲染引擎(Trident/mshtml.dll)在macOS或Linux上不存在。

第二步:在Internet Explorer中配置Java

在使用IE Tab之前,确保Java在IE本身中已正确配置:

  1. 打开Internet Explorer(在Windows 10上仍作为旧版应用程序存在)。
  2. 转到工具 > Internet选项 > 安全
  3. 选择Internet受信任的站点区域,然后点击自定义级别
  4. 滚动至Java applet脚本并将其设置为启用
  5. 确保Java插件在工具 > 管理加载项 > 工具栏和扩展下已列出并启用。

第三步:通过IE Tab加载Java站点

  1. 在Chrome中导航至目标URL。
  2. 点击工具栏中的IE Tab图标(或右键点击并选择在IE Tab中打开)。
  3. 页面将在嵌入Chrome标签页的IE引擎中重新加载。
  4. Java applet应像在独立IE会话中一样初始化。

限制和边缘情况

  • Windows 11注意事项:Microsoft已将Internet Explorer作为独立应用程序从Windows 11中移除。底层的mshtml.dll引擎仍然存在以保持旧版兼容性,但其与Java插件的行为不一致。在Windows 11环境中依赖此方法之前,请进行彻底测试。
  • Java安全提示:IE的Java安全对话框可能出现在Chrome窗口后面。如果applet似乎挂起,请使用Alt-Tab查找它们。
  • ActiveX与NPAPI:IE使用ActiveX而非NPAPI来支持Java。IE的Java插件(jp2iexp.dll)是与Firefox NPAPI插件不同的独立组件。确保安装了正确的插件。

方法三:搭载旧版浏览器的虚拟机

虚拟机提供最强的隔离性,是任何需要定期访问Java applet的运营环境的推荐方法。旧版浏览器及其攻击面完全包含在虚拟机边界内。

第一步:选择并安装虚拟化软件

VirtualBox(免费、开源、跨平台)和VMware Workstation Player(个人使用免费)是两个主要选项。

# Install VirtualBox on Ubuntu/Debian
sudo apt update && sudo apt install virtualbox virtualbox-ext-pack -y

对于Windows主机,从virtualbox.org下载VirtualBox安装程序,并使用默认设置运行。

第二步:创建虚拟机

为了兼容Java applet,虚拟机内的Windows 7 32位Windows 7 64位提供了最可靠的环境。Windows 7原生支持IE 11并具有广泛的Java插件兼容性。或者,搭载Firefox ESR 52的轻量级Linux发行版也能很好地工作,且存储占用更小。

此用例的推荐虚拟机资源分配:

  • RAM:最低2 GB(Windows 7推荐4 GB)
  • 磁盘:40 GB动态分配
  • CPU:2个虚拟核心
  • 网络:NAT(将虚拟机网络访问限制为仅通过主机进行出站访问)

第三步:在虚拟机内安装旧版浏览器和JRE

按照方法一的相同步骤操作,但完全在虚拟机内执行。关键优势:即使恶意Java applet利用浏览器或JRE中的漏洞,损害也被限制在虚拟机快照内。您可以在几秒钟内恢复到干净的快照。

快照纪律至关重要。在配置好浏览器和JRE之后、加载任何外部内容之前,立即拍摄干净的快照。清晰地命名它:

Snapshot: Clean Java Environment - [date]

第四步:为最小权限配置虚拟机网络

如果Java应用程序只需要与特定的内部服务器或IP范围通信,将虚拟机的网络适配器配置为使用仅主机网络,并在主机上设置静态路由。这可以防止虚拟机访问更广泛的互联网:

# On the host, add a route so the VM can only reach the target server
# Example: VM is on 192.168.56.0/24, target server is 10.0.0.50
sudo ip route add 10.0.0.50/32 via 192.168.56.1

第五步:访问Java内容

启动虚拟机,打开旧版浏览器,并导航至Java应用程序。对于频繁访问的应用程序,在主机上创建桌面快捷方式或启动脚本,利用VirtualBox的--startvm和来宾控制功能,自动启动虚拟机并将浏览器打开至目标URL。

为何此方法在架构上更优越

在虚拟机中运行过时软件是企业环境中维护对旧版业务线应用程序访问的标准做法。虚拟机充当安全边界:无论虚拟机内部发生什么,主机操作系统、您的主浏览器和所有其他应用程序均不受影响。这与浏览器隔离产品和安全访问服务边缘(SASE)架构中使用的原理相同。

如果您运行的是服务器端Java应用程序而非浏览器applet——例如,VPS上基于Java的网络应用程序——浏览器插件问题则无关紧要。现代Java网络框架(Spring Boot、Quarkus、Micronaut)完全在服务器端运行。配置得当的VPS托管环境无需任何浏览器插件依赖即可处理这些问题。

值得考虑的Java Applet替代方案

如果您对需要Java的应用程序有任何影响力,从applet迁移出去是正确的长期解决方案。浏览器插件生态系统已经决定性地向前发展。

按用例分类的替代技术:

  • 交互式UI / 数据可视化:使用Canvas API、WebGL、D3.js或Three.js的JavaScript
  • 实时通信:WebSockets、WebRTC
  • 浏览器中的高性能计算:WebAssembly(WASM)——可以接近原生速度运行编译的C、C++和Rust
  • 类桌面应用程序交付:渐进式网络应用(PWA)或基于Electron的桌面应用
  • 服务器端Java逻辑:将其作为REST或GraphQL API公开,供现代前端使用

对于运行基于Java的服务器应用程序且需要可靠托管的组织,独立服务器提供了在无资源争用的情况下大规模运行Java应用服务器(Tomcat、WildFly、GlassFish)所需的原始资源和完整root访问权限。

如果您的旧版Java应用程序托管在网络上,且您需要安全连接到它,将您的托管与有效的SSL证书配对,即使对于旧版应用程序栈也能确保加密传输。

实用决策矩阵

使用此清单为您的情况选择正确的方法:

使用方法一(Firefox ESR 52),如果:

  • 您需要一次性或非常不频繁的访问
  • 您使用的机器没有互联网连接或有严格的防火墙规则
  • 由于硬件或策略限制,您无法安装虚拟化软件

使用方法二(IE Tab / IE模拟器),如果:

  • 您使用的是仍可使用IE的Windows 10
  • Java应用程序是受信任网络上的内部企业工具
  • 您需要最简单的设置,开销最小

使用方法三(虚拟机),如果:

  • 您需要定期、持续地访问Java applet内容
  • 安全性和隔离性是组织要求
  • 您希望能够对环境进行快照和回滚
  • 多个用户需要相同的Java环境(导出并分发虚拟机镜像)

考虑完全迁移出Java applet,如果:

  • 您控制或能够影响应用程序的开发
  • 该应用程序面向客户或暴露于互联网
  • Java功能可以用WebAssembly或现代JavaScript框架复制

对于管理多个网络资产或客户环境的团队,VPS控制面板可以简化服务器端Java应用程序的管理,而无需为每个操作直接进行命令行访问。

如果您的用例涉及托管一个以前依赖Java applet进行文件管理或电子邮件功能的网络应用程序,现代电子邮件托管共享网络托管解决方案通过网络界面原生处理这些工作流,完全不需要任何浏览器插件。

常见问题

我可以通过更改about:config设置在当前版本的Firefox中重新启用Java吗?

不可以。没有任何about:config标志、隐藏首选项或扩展能够在Firefox 53或更高版本中恢复NPAPI插件支持。NPAPI子系统已从代码库中完全移除,而不仅仅是被禁用。在Firefox品牌浏览器中运行Java applet的唯一方法是使用Firefox ESR 52或更早版本的存档构建。

哪个JRE版本与Firefox NPAPI Java插件兼容?

JRE 8 Update 161(8u161)是最后一个广泛可用的、包含NPAPI插件(Windows上的npjp2.dll,Linux上的libnpjp2.so)的构建版本。后续的8u版本悄然放弃了该插件。JRE 9、11及所有后续LTS版本均不包含浏览器插件。

在连接互联网的机器上运行Firefox ESR 52是否安全?

不安全。Firefox ESR 52自2018年中期以来未收到安全补丁,容易受到数百个已记录漏洞的攻击。如果您必须使用它,请在严格防火墙后面的机器上使用,不进行一般浏览,理想情况下将网络访问限制为仅Java应用程序运行所在的特定服务器。

IE Tab方法在macOS或Linux上有效吗?

不行。IE Tab依赖于Windows Internet Explorer渲染引擎(mshtml.dll),该引擎仅存在于Windows上。在macOS和Linux上,该扩展要么无法安装,要么回退到没有Java支持的标准浏览器引擎。对于非Windows系统,方法一或方法三是唯一可行的选项。

Java applet和Java Web Start应用程序有什么区别?

Java applet通过NPAPI插件嵌入在浏览器页面内运行。Java Web Start(JNLP)通过浏览器链接启动独立的Java应用程序,而不将其嵌入页面——它使用javaws启动器。Java Web Start也在JDK 9中被弃用,并在JDK 11中被移除,但OpenWebStart(一个开源重新实现)仍然可以在现代系统上运行JNLP应用程序,无需任何浏览器插件依赖,使其成为比applet更可行的旧版Java应用程序交付路径。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用