为什么Java告诉我我的小程序同时包含有符号和未签名的代码?

2022-09-04 07:29:27

我签名的Java小程序一直运行良好,直到Java更新19。现在,Java Update 19 上的一些(但不是全部)用户报告了一条 Java 安全消息,指出我们的小程序同时包含已签名和未签名的代码。

创建小程序的过程如下:

  1. 清理并构建 Netbeans IDE 中的小程序项目。
  2. 在WinRAR中打开Applet jar文件,并将所需的mysql JDBC驱动程序.class文件添加到jar文件中。
  3. 对小程序 jar 文件进行签名。

有人可以告诉我如何确定在我们的小程序中已签名的代码和未签名的代码?有没有更好的方法将mysql JDBC驱动程序jar文件包含在我们的小程序中,而不是将jar文件内容复制到我们的小程序jar文件中?

谢谢


答案 1

编辑:由于Java 7 Update 45中的错误,您不应该将可信库添加到清单文件中。只需添加新属性 Caller-Allowable-Codebase。有关详细信息,请参阅此问题:Java 小程序清单 - 允许所有调用方允许的代码库

Java 7 Update 21 于 2013 年 4 月 16 日发布,导致我们的小程序开始显示此警告对话框。

根据发行说明:从 JDK 7u21 开始,在特权小程序中调用代码的 JavaScript 代码将被视为混合代码,如果签名的 JAR 文件未使用 Trusted-Library 属性标记,则会引发警告对话框。

要解决此问题,请编辑您的 manifest.mf 文件并添加如下行:

Trusted-Library: true

但是,在执行此操作之前,您应该非常小心。如果可以从 javascript 调用已签名的小程序,则恶意用户可能会在用户的计算机上执行有害操作。

保护小程序的一种快速方法是防止它在其他网站上运行。为此,请将代码放在方法中,该方法将查看并在与站点不匹配时引发异常。init()getCodeBase().getHost()

Java 7 Update 25 引入了另一种方法来限制可以运行小程序的站点。您可以在清单文件中设置 Codebase 属性,如下所示:

Codebase: test.example.com www.example.com

Java 7 Update 45(2013 年 10 月 16 日发布)对 LiveConnect 系统(javascript-to-applet bridge)进行了更多更改,这些更改可能会导致另一个提示。本文介绍7u45的变化:https://blogs.oracle.com/java-platform-group/entry/liveconnect_changes_in_7u45

基本上,您还需要将以下内容添加到清单文件中以避免出现提示:

Caller-Allowable-Codebase: test.example.com www.example.com

如果您正在销售包含小程序的产品,并且您不知道可以在哪些域上部署它,则可以在此处填充*。


答案 2

可以尝试的一些操作:

  • 转到java插件控制面板($JAVA_HOME/bin/ControlPanel)。
  • 转到选项卡。Advanced
  • 扩大Debug
  • 检查、和Enable tracingEnable loggingShow applet lifecycle exceptions
  • 扩大Java console
  • 检查Show console
  • 单击(或 ,具体取决于您的操作系统)OKClose

当您的小程序加载时,Java控制台将打开。单击它,然后立即按“5”。它将记录正在获取的 jar 和类以运行小程序。在它的某个地方应该有一条消息,指示哪些jar或类被认为是“无符号的”。如果您第一次错过了它,只需重新加载窗口即可重试。